通过goole获取手机唯一标识
生活随笔
收集整理的這篇文章主要介紹了
通过goole获取手机唯一标识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
國內的一些方法獲取手機的唯一標識現在7.0之后都不好了,不多說直接上代碼,主要是根據goole商店
import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.IInterface; import android.os.Looper; import android.os.Parcel; import android.os.RemoteException;import java.util.concurrent.LinkedBlockingQueue;public class AdvertisingIdClient {/*** 這個方法是耗時的,不能在主線程調用*/public static String getGoogleAdId(Context context) throws Exception {if (Looper.getMainLooper() == Looper.myLooper()) {return "Cannot call in the main thread, You must call in the other thread";}PackageManager pm = context.getPackageManager();pm.getPackageInfo("com.android.vending", 0);AdvertisingConnection connection = new AdvertisingConnection();Intent intent = new Intent("com.google.android.gms.ads.identifier.service.START");intent.setPackage("com.google.android.gms");if (context.bindService(intent, connection, Context.BIND_AUTO_CREATE)) {try {AdvertisingInterface adInterface = new AdvertisingInterface(connection.getBinder());return adInterface.getId();} finally {context.unbindService(connection);}}return "";}private static final class AdvertisingConnection implements ServiceConnection {boolean retrieved = false;private final LinkedBlockingQueue<IBinder> queue = new LinkedBlockingQueue<>(1);public void onServiceConnected(ComponentName name, IBinder service) {try {this.queue.put(service);} catch (InterruptedException localInterruptedException) {}}public void onServiceDisconnected(ComponentName name) {}public IBinder getBinder() throws InterruptedException {if (this.retrieved)throw new IllegalStateException();this.retrieved = true;return this.queue.take();}}private static final class AdvertisingInterface implements IInterface {private IBinder binder;public AdvertisingInterface(IBinder pBinder) {binder = pBinder;}public IBinder asBinder() {return binder;}public String getId() throws RemoteException {Parcel data = Parcel.obtain();Parcel reply = Parcel.obtain();String id;try {data.writeInterfaceToken("com.google.android.gms.ads.identifier.internal.IAdvertisingIdService");binder.transact(1, data, reply, 0);reply.readException();id = reply.readString();} finally {reply.recycle();data.recycle();}return id;}public boolean isLimitAdTrackingEnabled(boolean paramBoolean)throws RemoteException {Parcel data = Parcel.obtain();Parcel reply = Parcel.obtain();boolean limitAdTracking;try {data.writeInterfaceToken("com.google.android.gms.ads.identifier.internal.IAdvertisingIdService");data.writeInt(paramBoolean ? 1 : 0);binder.transact(2, data, reply, 0);reply.readException();limitAdTracking = 0 != reply.readInt();} finally {reply.recycle();data.recycle();}return limitAdTracking;}} }在main?里面直接調用
Executors.newSingleThreadExecutor().execute(new Runnable() {@Overridepublic void run() {try {adid = AdvertisingIdClient.getGoogleAdId(com.facebook.FacebookSdk.getApplicationContext());Log.e("MainActivity", "adid: " + adid);} catch (Exception e) {e.printStackTrace();}} });?
總結
以上是生活随笔為你收集整理的通过goole获取手机唯一标识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何正确选择窗帘杆保障美观度?
- 下一篇: Android java.lang.Il