日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android10获取imei,Android 10 root用户获取imei

發布時間:2025/3/12 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android10获取imei,Android 10 root用户获取imei 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IMEI(International Mobile Equipment Identity)是國際移動設備識別碼的縮寫,由15-17位數字組成,與手機是一一對應的關系。無論刷機還是恢復出廠設置,該設備標識碼都不會改變,所以在廣告和流量統計等方面特別好用,備受開發者的青睞。

但自從android29之后,通android api的TelephonyManager提供的getImei方法已經無法獲取到手機的imei了,那我們又該如何獲取的手機的唯一設備標識符呢?

Android開發者文檔提供的方式是Android Id,這種獲取的方式在大多時候確實是有效的,能滿足常規的廣告統計需要,但如果遇到手機刷機、系統升級或者恢復出廠后,這個id就會被重置,所以在某些業務場景下(例如要將設備標識作為用戶唯一id),就顯得捉襟見肘了。

網上有一些解決方案,大多是用mac地址,UUid,或者針對特定的手機廠商去生成唯一標識,那我們真的在android 10系統中就拿不到手機的imei了嗎?答案是否定的,例如在root權限下,我們就可以繞過android的api,直接拿到手機的imei。

筆者假設用戶的手機已經root,并且已經將手機用android調試橋連接到電腦上去,那我們在電腦終端輸入adb命令,便可將手機的imei打印出來:

adb shell service call iphonesubinfo 1

我們不妨通過正則表達式,將獲取到的imei匹配出來:

adb shell service call iphonesubinfo 3 i32 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=

既然我們在終端中可以獲取到imei,那我們只需要把這個命令作為shell,在代碼里運行即可,但是需要su的權限,不然也獲取不到imei:

public static String getImeiByShell(){

try {

String shell = "service call iphonesubinfo 3 i32 1 | awk -F \"'\" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=";

Process p=Runtime.getRuntime().exec(new String[]{"su","-c",shell});

BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));

String readLine=br.readLine();

while(readLine!=null){

Log.d("execShell",readLine);

return readLine.trim();

}

if(br!=null){

br.close();

}

p.destroy();

p=null;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

如此,我們便可以獲取到手機的imei。

作者:凌塘

鏈接:https://juejin.cn/post/6953079991303143432

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的android10获取imei,Android 10 root用户获取imei的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。