2016-06-21 5 views
1

私はイーメイをネイティブコードでギャラクシーS6から取得する必要があります! Javaコードを使用することはできません。ロリポップでマシュマロはサービス呼び出しでネイティブに

私はImeinumberを抽出IMEIや他の文字を、取得するために

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

を使用してください。

マシュマロウでは、新しいパーミッションがリリースされました。私はそれを実装しました。 そして私は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(); 

しかし、古いネイティブメソッドでNumberを取得したい場合、次の結果が得られます。

>null from uid 10169 not allowed to perform OP_READ_PHONE_STATE 

私はadbのシェルのコマンド「3 iphonesubinfoサービスコール」を試してみましたが、それは私に古い結果をgaves。しかし、ネイティブコードではありません。

誰でもこの問題を解決するためのアイデアはありますか?

+0

アイデアはありませんか? –

答えて

0
  1. Android 5.x +または一部の電話機では、IMEIまたはIMSIを取得するには、アプリの起動時に動的な権限が必要です。 X X iphonesubinfo

  2. サービスコールは7は、Androidの5.x〜Android用7.xの

  3. Javaコードで、あなたがRuntim.getRuntimeを使用することができます()のためのIMSIをされ、プラットフォームのバージョン番号です。EXEC( String cmd)を実行してこのcmd行を実行し、それを取得するためにProcess InputStreamを読み込みます。

  4. C/C++コードでは、デバイスにアクセス許可が必要な場合は、アクティビティでJavaのアクセス許可を要求してから、Nativeメソッドを呼び出すことができます。許可について

  5. が必要です:

1)許可を確認します....(ST = ContextCompat.checkSelfPermissionをINT); STは、あなたが直接、IMEI/IMSIを取得することができますPackageManager.PERMISSION_GRANTED、そうでない場合は、

2)コールActivityCompat.requestPermission(活動、String []型の権限、int型のrequestCode)及び方法overriedされている場合:AppCompatActivityでonRequestPermissionを()。

3)onRequestPermissionで、READ_PHONE_STATEの許可がGRANTEDであることを確認し、get IMEI/IMSIを再度呼び出します。

+0

要求フローが非同期であるため、requestPermissionを呼び出すときにcmd行を呼び出すことができないため、requestPermissionコールバックでcmd lineを呼び出して結果を確認する必要があります。 –

関連する問題