アプリの広告IDを取得したいのですが、うまくいきません。
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);
}
}
それは私を示唆している例外をスローしますandroidx.ads.identifier.AdvertisingIdNotAvailableException: No Advertising ID Provider available
。私は2つの携帯電話とエミュレータで試してみましたが、すべて同じ結果でした。
前もって感謝します
pS:私はAndroid docで提供されているソリューションをチェックしますが、それは動作しません私 https ://developer.Android.com/training/articles/ad-id
そして私は依存関係を必要としないソリューションを持っています
このコードを試してみてください。
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に追加された依存関係
dependencies {
implementation 'com.google.Android.gms:play-services-ads-lite:18.1.1'
}
トレーニングサンプル で説明されているように、コールバックで使用してみてください。メインスレッドからすべての呼び出しを行います。それが役に立てば幸い
以下はKotlin
の実用的なソリューションです。
まず、このルールをアプリモジュールレベルに追加しますbuild.gradle
依存関係にあるファイル:implementation 'com.google.Android.gms:play-services-ads-lite:11.8.0'
これはAddUtilsJavaクラスです:
package com.example.myapplication
import Android.content.Context
import Android.os.AsyncTask
import Android.util.Log
import com.google.Android.gms.ads.identifier.AdvertisingIdClient
import com.google.Android.gms.common.GooglePlayServicesNotAvailableException
import com.google.Android.gms.common.GooglePlayServicesRepairableException
import Java.io.IOException
class AddUtilsJava : AsyncTask<Context, String, String>() {
private fun getIdThread(context: Context): String? {
var idInfo: AdvertisingIdClient.Info? = null
try {
idInfo = AdvertisingIdClient.getAdvertisingIdInfo(context.applicationContext)
} catch (e: GooglePlayServicesNotAvailableException) {
e.printStackTrace()
} catch (e: GooglePlayServicesRepairableException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
var advertId: String? = null
try {
advertId = idInfo!!.id
} catch (e: NullPointerException) {
e.printStackTrace()
}
return advertId
}
override fun doInBackground(vararg contexts: Context): String? {
return getIdThread(contexts[0])
}
override fun onPostExecute(s: String?) {
super.onPostExecute(s)
if (s != null)
Log.d(TAG, s)
}
companion object {
internal var TAG = "addUtilsJava"
}
}
これはbuild.gradleファイルです。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.cardview:cardview:1.0.0'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
implementation 'com.google.Android.gms:play-services-ads-lite:11.8.0' //for ads
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
testImplementation 'junit:junit:4.13-beta-3'
androidTestImplementation 'androidx.test:runner:1.3.0-alpha02'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha02'
}