2016-07-23 4 views
-2

Simカード番号、IMEI番号、および電話番号を提供するアプリケーションを作成しようとしています。私はそれを行うときしかし、私は次のエラーを取得する:SIM情報の要求時にjava.lang.SecurityExceptionを取得する

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hadi.sim_info/com.example.hadi.sim_info.MainActivity}: java.lang.SecurityException: getLine1NumberForDisplay: Neither user 10034 nor current process has android.permission.READ_SMS 

私はマニフェストに許可を書かれている:ここで

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

は、アプリケーションのための私のコードです:

public class MainActivity extends AppCompatActivity { 

    TextView tlf, sim, IMEI; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     tlf = (TextView) findViewById(R.id.Tlf_nr); 
     sim = (TextView) findViewById(R.id.sim); 
     IMEI = (TextView) findViewById(R.id.IMEI); 

     TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
     String number = tm.getLine1Number(); 
     String simNR = tm.getSimSerialNumber(); 
     String IMEINR = tm.getDeviceId(); 

     tlf.setText("Tlf. Nr.: "+number); 
     sim.setText("SIM Nr.: "+simNR); 
     IMEI.setText("IMEI Nr.: "+ IMEINR); 
    } 
} 

EDIT

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.example.hadi.sim_info" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 

       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 
+0

実行時に許可を要求する必要があります。 –

+0

@OneStepBack:私はそれをしました。 OPを編集しました。それを確認してください –

+0

あなたが行った部分を投稿することはできますか? –

答えて

3

Android 6.x以上でアプリケーションを実行している場合は、アクティビティのonCreateメソッドに次のコードを追加します。

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

CONST_IDは、この要求を識別するために定義する定数です。

権限が付与されていない場合、ユーザに要求権限ダイアログがポップアップ表示されます。次のメソッドをオーバーライドすることによって、アクセス許可が付与されているかどうかを追跡できます。

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 

許可状態に基づいて、残りのコードを実行することができます。

+0

CONST_IDを整数として定義する必要はありますか? –

+0

はい、その整数です。 googleの開発者のメソッド定義でもできます。一意の値を定義して、onRequestPermissionResultでこの値をチェックし、どのアクセス許可要求に対してコールバックが呼び出されたかを識別できるようにします。 – chejaras

関連する問題