Read phone state runtime error in Android M
Habe ich die Berechtigung " Lesen Telefon Zustand im manifest als auch in Aktivität . Aber ich bin mit der Laufzeit-exception.
Auf dem fragment , das ich benutzt hatte, Telefonie Krippe zu bekommen, IMEI und auf die Aktivität hatte ich angesichts der Laufzeit die Berechtigung.
Hier ist mein Fehler:
java.lang.SecurityException: getImei: Neither user 10122 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getImeiForSubscriber(IPhoneSubInfo.java:532)
at android.telephony.TelephonyManager.getImei(TelephonyManager.java:783)
at android.telephony.TelephonyManager.getDeviceId(TelephonyManager.java:722)
at com.sixmod.HomeFragment.sendTokenToServer(HomeFragment.java:3045)
at com.sixmod.HomeFragment.onCreateView(HomeFragment.java:343)
Den Code für die Aktivität ist hier :
private boolean checkAndRequestPermissions() {
int permissionSendMessage = ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_PHONE_STATE);
int locationPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
List<String> listPermissionsNeeded = new ArrayList<>();
if (permissionSendMessage != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (locationPermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
In der onRequest-Berechtigung habe ich geprüft, wie diese :
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
Log.d("TAG", "Permission callback called-------");
switch (requestCode) {
case REQUEST_ID_MULTIPLE_PERMISSIONS: {
Map<String, Integer> perms = new HashMap<>();
//Initialize the map with both permissions
perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
//Fill with actual results from user
if (grantResults.length > 0) {
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
//Check for both permissions
if (perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
Log.d("TAG", "sms & location services permission granted");
//process the normal flow
//else any one or both the permissions are not granted
} else {
Log.d("TAG", "Some permissions are not granted ask again ");
//permission is denied (this is the first time, when "never ask again" is not checked) so ask again explaining the usage of permission
// //shouldShowRequestPermissionRationale will return true
//show the dialog or snackbar saying its necessary and try again otherwise proceed with setup.
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
showDialogOK("Read Phone State and Location Services Permission required for this app",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
checkAndRequestPermissions();
break;
case DialogInterface.BUTTON_NEGATIVE:
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
//proceed with logic by disabling the related features or quit the app.
break;
}
}
});
}
//permission is denied (and never ask again is checked)
//shouldShowRequestPermissionRationale will return false
else {
Toast.makeText(this, "Go to settings and enable permissions", Toast.LENGTH_LONG)
.show();
// //proceed with logic by disabling the related features or quit the app.
}
}
}
}
}
}
private void showDialogOK(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", okListener)
.create()
.show();
}
haben Sie setzen die Erlaubnis in menifest?
JA , über application-tag <uses-permission android:name="android.die Genehmigung.READ_PHONE_STATE" />
versuchen Sie, reinigen Sie und neu erstellen Projekt
JA , über application-tag <uses-permission android:name="android.die Genehmigung.READ_PHONE_STATE" />
versuchen Sie, reinigen Sie und neu erstellen Projekt
InformationsquelleAutor Barnali Bhattacharjee | 2017-03-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
hinzufügen AndroidManifest.xml Datei
Erlaubnis bitten.
Griff Rückruf, wenn Sie um Erlaubnis bitten.
Für einige Berechtigungen, die Sie haben, um explizit Fragen der Benutzer in der runtime:
http://developer.android.com/training/permissions/requesting.html
InformationsquelleAutor Umesh Sonawane
Versuchen, diese ,
mContext ist Ihre Tätigkeit Kontext
bekommen Berechtigungen Ergebnis
überprüfen Sie die Berechtigungen für marshmallow
AndroidManifest.xml Datei
können Sie mir sagen, in deinem obigen code ,wenn ich Ihnen eine weitere Berechtigung, wie ich es tun kann , ein weiterer STANDORT ist in ORDNUNG
Check aktualisiert String[] PERMISSIONS = {android.Manifest.die Genehmigung.READ_PHONE_STATE,android.Manifest.die Genehmigung.ACCESS_FINE_LOCATION };
wieder zeigt Weder user 10124 noch Laufenden Prozess android.die Genehmigung.READ_PHONE_STATE.
InformationsquelleAutor user2025187