2015-11-02 7 views
11

मैं प्रोग्राम के रूप में निम्न कोड के साथ एक नंबर करने के लिए कॉल करने के लिए कोशिश कर रहा हूँ:रद्द अनुमति android.permission.CALL_PHONE

String number = ("tel:" + numTxt.getText()); 
Intent intent = new Intent(Intent.ACTION_CALL); 
intent.setData(Uri.parse(number)); 
startActivity(intent); 

मैं प्रकट में अनुमति निर्धारित किया है:

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

मैं मैं परीक्षण और डिबगिंग के लिए वास्तविक डिवाइस के साथ काम कर रहा हूं, यह एंड्रॉइड एम के साथ नेक्सस 5 है, मेरा संकलन एसडीकेवीरियन 23 है। मुझे निम्नलिखित सुरक्षा अपवाद मिल रहा है:

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 (एपीआई एलएलएल 23) में हमारे पास "रनटाइम अनुमतियां" नामक कुछ है। आपको इसके बारे में पढ़ना होगा।

आप दस्तावेज here पा सकते हैं।

+0

धन्यवाद, आर्टूर, मैं इसे दस्तावेज़ीकरण ट्यूटोरियल के साथ हल करने में सफल रहा हूं। मैं समझता हूं कि एंड्रॉइड पर <23 अनुमति अभी भी इंस्टॉल करने के लिए कहा जाएगा, क्या मैं सही हूँ? –

+0

@ लुइसियस हिपन हां, पिछड़े संगतता के लिए। –

7

अनुमति CALL_PHONE खतरनाक अनुमति समूह से संबंधित है।
तो यदि आपके ऐप्स लक्ष्य एसडीके 23 या उच्चतर हैं और आपका डिवाइस एंड्रॉइड 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(); 
    } 
} 

अपने अनुप्रयोग अनुरोध अनुमतियाँ, सिस्टम उपयोगकर्ता के लिए एक संवाद बॉक्स प्रस्तुत करता है। जब उपयोगकर्ता प्रतिक्रिया देता है, तो सिस्टम आपके ऐप की ऑनक्व्यूमप्रमिशन रीसेट() विधि को उपयोगकर्ता प्रतिक्रिया को पास करता है।

@Override 
public void onRequestPermissionsResult(int requestCode, 
    String permissions[], int[] grantResults) { 
    switch (requestCode) { 
    case MY_PERMISSIONS_REQUEST_CALL_PHONE: { 
     // If request is cancelled, the result arrays are empty. 
     if (grantResults.length > 0 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // permission was granted, yay! Do the phone call 

     } else { 

      // permission denied, boo! Disable the 
      // functionality that depends on this permission. 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
    } 
} 
संबंधित मुद्दे