2016-02-10 6 views
6

के एंड्रॉयड एम अनुमति के लिए उपकरण चल रहा है एंड्रॉयड 6.0 या उच्चतर जब im getLine1Number() का उपयोग कर फोन नंबर प्राप्त करने की कोशिश:परीक्षण किया READ_PHONE_STATE (खतरनाक अनुमतियाँ)

java.lang.SecurityException: READ_PHONE_STATE आवश्यक है : न तो उपयोगकर्ता 10184 और न ही वर्तमान प्रक्रिया में android.permission.READ_PHONE_STATE है। यह बाहर आ रहा है।

मैं अनुमति घोषित:

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

https://stackoverflow.com/questions/32635704/cant-get-the-permission – CommonsWare

+0

क्षमा सर मैं फिर से फिर से पूछते हैं, और जवाब –

उत्तर

14

Android 6.0 में, आप स्पष्ट रूप से अनुमति प्रदान करने के लिए कहें की जरूरत है। इसे मैनिफेस्ट में घोषित करना पर्याप्त नहीं है।

दस्तावेज़ों में यह article नया मॉडल सीखना शुरू करने के लिए एक शानदार जगह है, लेकिन मैं एक संक्षिप्त सारांश दूंगा।

हर बार जब आप एक "खतरनाक अनुमति" की आवश्यकता होती है, तो आपको यह जांचने की आवश्यकता होती है कि अनुमति वर्तमान में दी गई है, क्योंकि उपयोगकर्ता इसे किसी भी समय रद्द कर सकता है।

यह checkSelfPermission विधि के साथ किया जा सकता है।

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_PHONE_STATE) 
    != PackageManager.PERMISSION_GRANTED) { 
     // We do not have this permission. Let's ask the user 
} 

आप के रूप में ऐसी

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

, requestPermissions विधि के साथ अनुमति का अनुरोध कर सकते हैं कहाँ PERMISSION_READ_STATE एक निरंतर पूर्णांक आप द्वारा परिभाषित किया गया बाद में कॉलबैक विधि में जांच करने के लिए है।

फिर आप अपनी गतिविधि में onRequestPermissionsResult ओवरराइड करेंगे और देखें कि अनुमति दी गई थी या नहीं। यदि यह था, तो आप आगे बढ़ सकते हैं और खतरनाक कार्रवाई को पूर्ववत कर सकते हैं।

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_READ_STATE: { 
      if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // permission granted! 
       // you may now do the action that requires this permission 
      } else { 
       // permission denied 
      } 
      return; 
     } 

    } 
} 
+0

सर के लिए धन्यवाद, उपयोगकर्ता को परेशान किए बिना यह संभव है ? –

+1

नहीं, 6.0 से आगे हमें सीधे उपयोगकर्ता से पूछना है। यदि आप इस बारे में अधिक उत्सुक हैं कि एंड्रॉइड की दिशा क्यों चल रही है, तो आप इस वीडियो को Google से देख सकते हैं: https://www.youtube.com/watch?v=f17qe9vZ8RM –

+0

क्या अनुमतियों की एक सूची है स्पष्ट रूप से पूछा? – JiTHiN

1
public class MainActivity extends AppCompatActivity { 

    TextView textView; 
    String device_unique_id,IMEI; 


    private static final int MY_PERMISSIONS_REQUEST_READ_PHONE_STATE = 0; 


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

     textView = (TextView)findViewById(R.id.textView); 
    } 
    public void GetImei(View view) 
    { 



     loadIMEI(); 

    } 

    public void loadIMEI() { 
     // Check if the READ_PHONE_STATE permission is already available. 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
        Manifest.permission.READ_PHONE_STATE)) { 
//    get_imei_data(); 
      } else { 
       ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 
         MY_PERMISSIONS_REQUEST_READ_PHONE_STATE); 
      } 
     } else { 

      TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
      IMEI = mngr.getDeviceId(); 
      device_unique_id = Settings.Secure.getString(this.getContentResolver(), 
        Settings.Secure.ANDROID_ID); 
      textView.setText(device_unique_id+"----"+mngr.getDeviceId()); 
      // READ_PHONE_STATE permission is already been granted. 
      Toast.makeText(this,"Alredy granted",Toast.LENGTH_SHORT).show(); 
     } 
    } 
     @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) { 

     if (requestCode == MY_PERMISSIONS_REQUEST_READ_PHONE_STATE) { 

      if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

//    Toast.makeText(this,"Alredy DONE",Toast.LENGTH_SHORT).show(); 
       TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
       IMEI = mngr.getDeviceId(); 
       device_unique_id = Settings.Secure.getString(this.getContentResolver(),Settings.Secure.ANDROID_ID); 
       textView.setText(device_unique_id+"----"+mngr.getDeviceId()); 

      } else { 
       Toast.makeText(this,"ehgehfg",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
संबंधित मुद्दे