2015-11-02 7 views
11

私は、Android Mを搭載したNexus 5です。私のcompileSdkVersionは23です。私は次のセキュリティ例外を取得しています。失効許可android.permission.CALL_PHONE

error: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{cbbd7c1 5228:com.dialerTest.DialerApp/u0a96} (pid=5228, uid=10096) with revoked permission android.permission.CALL_PHONE 

私は同様のQ/Aのためにウェブとこのコミュニティを検索して答えを見つけることができませんでした。どんな助けもありがとう。

答えて

13

アンドロイド6.0(Api lvl 23)では、「ランタイムパーミッション」と呼ばれるものがあります。あなたはそれについて読む必要があります。

文書hereがあります。

+0

ありがとう、Artur、ドキュメントチュートリアルでこれを解決することに成功しました。私はAndroidの場合<23でも、インストール時に依然として許可が求められることを理解しています。 –

+0

@LuciusHipanはい、後方コンパイル可能です。 –

7

権限CALL_PHONEは危険な権限グループに属します。
アプリのターゲットSDKが23以上で、Android 6.0以降でデバイスを実行している場合は、アプリの実行中にCALL_PHONE権限をリクエストする必要があります。

例:

String number = ("tel:" + numTxt.getText()); 
mIntent = new Intent(Intent.ACTION_CALL); 
mIntent.setData(Uri.parse(number)); 
// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.CALL_PHONE) 
    != PackageManager.PERMISSION_GRANTED) { 

    ActivityCompat.requestPermissions(thisActivity, 
      new String[]{Manifest.permission.CALL_PHONE}, 
      MY_PERMISSIONS_REQUEST_CALL_PHONE); 

    // MY_PERMISSIONS_REQUEST_CALL_PHONE is an 
    // app-defined int constant. The callback method gets the 
    // result of the request. 
} else { 
    //You already have permission 
    try { 
     startActivity(mIntent); 
    } catch(SecurityException e) { 
     e.printStackTrace(); 
    } 
} 

アプリの要求の権限は、システムはユーザーにダイアログボックスを表示します。ユーザーが応答すると、システムはアプリケーションのonRequestPermissionsResult()メソッドを呼び出し、ユーザーの応答を渡します。

関連する問題