2016-06-21 22 views
1

我需要從Galaxy S6獲得Imei本機代碼! 我不能使用它的Java代碼。棉花糖本地獲得Imei服務電話

在棒棒堂我使用

char *res = exec_get_out((char *) "service call iphonesubinfo 3"); 

獲得IMEI和其他字符,其中i提取Imeinumber。

現在與棉花糖新的權限被釋放。我實現了它。 我可以像下面的javacode一樣獲得imei。

if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) 
    { 
     requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 123); 
    } 

    String test = ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); 

但是,當我想用​​舊的本地方法獲得數字,我得到以下結果。

>null from uid 10169 not allowed to perform OP_READ_PHONE_STATE 

我試着在ADB命令,「iphonesubinfo 3服務電話」,它gaves我老的結果。但不是在本地代碼。

有沒有人想解決這個問題?

+0

沒有人有想法嗎? –

回答

0
  1. 在Android 5.x +或某些電話設備上,獲取IMEI或IMSI需要動態許可,當應用程序啓動時。

  2. 服務呼叫iphonesubinfo X中的X爲平臺的版本號,7 IMSI爲Android 5.x的〜Android的7.x的

  3. 在Java代碼中,你可以使用Runtim.getRuntime()。EXEC( String cmd)執行此cmd行,並讀取Process inputStream以獲取它。

  4. 在C/C++代碼中,如果設備需要權限,您可以在Activity中需要Java的權限,然後調用Native方法。

  5. 關於權限要求:

1)檢查許可:整數ST = ContextCompat.checkSelfPermission(....); 如果ST是PackageManager.PERMISSION_GRANTED可以直接,得到IMEI/IMSI如果沒有,

2)呼叫ActivityCompat.requestPermission(活動,字符串[]權限,INT requestCode)和overried的方法:在AppCompatActivity onRequestPermission()。

3)在onRequestPermission中,檢查READ_PHONE_STATE權限的結果是否爲GRANTED,並再次調用IMEI/IMSI。

+0

許可要求流程是異步的,所以當你調用requestPermission時你不能調用cmd行,你應該調用requestPermission回調中的cmd行並檢查結果。 –