Search code examples
javaandroidkotlinandroid-asynctaskads

can not get Advertising ID Provider in android


i want to get Advertising ID for my app, which i have no success.

import androidx.ads.identifier.AdvertisingIdClient;
import androidx.ads.identifier.AdvertisingIdInfo;

public class addUtilsJava extends AsyncTask<Context, String, String> {

    static String TAG = "addUtilsJava";


    private String getIdThread(Context context) {

        AdvertisingIdInfo adInfo = null;
        try {
            adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context).get();

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        if (adInfo != null) {
            final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
            return adInfo.getId();
        }
        return null;
    }
    @Override
    protected String doInBackground(Context... contexts) {
        return getIdThread(contexts[0]);
    }
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if (s != null)
            Log.d(TAG, s);
    }
}

it throw exception that suggesting me androidx.ads.identifier.AdvertisingIdNotAvailableException: No Advertising ID Provider available. i tried with 2 mobile phone and emulator all with same result.

thanks in advance

ps: i check the solution provided in android doc but it won't work for me https://developer.android.com/training/articles/ad-id
and i rather have a solution that don't require dependency


Solution

  • Try this Code..for me working..

    import com.google.android.gms.ads.identifier.AdvertisingIdClient;
    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import com.google.android.gms.common.GooglePlayServicesRepairableException;
    import android.widget.Toast;
    public class MainActivity extends AppCompatActivity {
     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {
                        @Override
                        protected String doInBackground(Void... params) {
                            AdvertisingIdClient.Info idInfo = null;
                            try {
                                idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
                            } catch (GooglePlayServicesNotAvailableException e) {
                                e.printStackTrace();
                            } catch (GooglePlayServicesRepairableException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            String advertId = null;
                            try{
                                advertId = idInfo.getId();
                            }catch (NullPointerException e){
                                e.printStackTrace();
                            }
    
                            return advertId;
                        }
    
                        @Override
                        protected void onPostExecute(String advertId) {
                            Toast.makeText(getApplicationContext(), advertId, Toast.LENGTH_LONG).show();
                        }
    
                    };
                    task.execute();
    
    }
    
    }
    

    build.gradle added dependencies

    dependencies {
            implementation 'com.google.android.gms:play-services-ads-lite:18.1.1'
    }