Ich habe ein altes Projekt mit Ziel SDK 21, jetzt muss ich Run-Time-Erlaubnis in das, so kann mir jemand vorschlagen, beste und einfache Möglichkeit, das zu tun.Beste Möglichkeit, Runtime-Erlaubnis in Android zu behandeln
-1
A
Antwort
1
Sie können die Berechtigung für den Begrüßungsbildschirm oder den ersten Bildschirm verwenden.
wenn mehrere Erlaubnis dann alle einmal behandeln.
Wenn der Benutzer keine Berechtigung verweigert, dann zeigt er eine Nachricht, dass einige Berechtigungen erforderlich sind.
hoffe, es wird dir helfen.
Hier ist ein Beispiel, wie Sie mit mehreren Berechtigungen umgehen können.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
if(checkAndRequestPermissions()){
//all permission granted
}else{
//require all permission.
}
}
private boolean checkAndRequestPermissions() {
int camerapermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
int phonestate = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
int location = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
int recordaudio = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
int permissionLocation = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (camerapermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (phonestate != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (location != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (recordaudio != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.RECORD_AUDIO);
}
if (permissionLocation != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_ID_MULTIPLE_PERMISSIONS: {
Map<String, Integer> perms = new HashMap<>();
perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, 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.CAMERA) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
) {
Log.d(TAG, "camera & location services permission granted");
// here you can do your logic all Permission Success Call
moveToNxtScreen();
} else {
Log.d(TAG, "Some permissions are not granted ask again ");
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
showDialogOK("Some Permissions are required for Open Camera",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
checkAndRequestPermissions();
break;
case DialogInterface.BUTTON_NEGATIVE:
// proceed with logic by disabling the related features or quit the app.
dialog.dismiss();
break;
}
}
});
} else {
explain("You need to give some mandatory permissions to continue. Do you want to go to app settings?");
}
}
}
}
}
}
private void showDialogOK(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", okListener)
.create()
.show();
}
private void explain(String msg) {
final android.support.v7.app.AlertDialog.Builder dialog = new android.support.v7.app.AlertDialog.Builder(this);
dialog.setMessage(msg)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
Utils.startInstalledAppDetailsActivity(LoginActivity.this);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
dialog.create().dismiss();
finish();
}
});
dialog.show();
}
1
zwei Variablen erstellen wie
private static final int REQUEST_CODE_PERMISSION = 1;
String mPermission = Manifest.permission.ACCESS_FINE_LOCATION;
nach Methode erstellen wie diese
private void getPermission() {
if(Build.VERSION.SDK_INT>= 23) {
if (checkSelfPermission(mPermission) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{mPermission,
},
REQUEST_CODE_PERMISSION);
return;
}
else
{
/* your code if permission already access
}
}
}
Nach Überschreibung onRequestPermissionsResult Verfahren wie dieses
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e("Req Code", "" + requestCode);
if (requestCode == REQUEST_CODE_PERMISSION) {
if (grantResults.length == 1 &&
grantResults[0] == MockPackageManager.PERMISSION_GRANTED) {
methodRedirect();
}
else{
this.getPermission();
}
}
}
Auf diese Weise sogar die Erlaubnis Benutzer verweigern , wird es wieder zeigen.
Sie können mehrere Berechtigungen wie folgt verwalten.
Verwandte Themen
- 1. Beste Möglichkeit, mehrere Scrolling-Spalten zu behandeln
- 2. Beste Möglichkeit, mehrere NSURL-Verbindungen zu behandeln
- 3. Beste Möglichkeit, mehrere UITableViews in einem UIViewController zu behandeln?
- 4. beste Möglichkeit, große Anfrage in WCF zu behandeln
- 5. Beste Möglichkeit, viele optionale Parameter in Angular zu behandeln
- 6. Beste Möglichkeit, dynamische Menge von Formularfeldern in PHP zu behandeln?
- 7. Beste Möglichkeit, große Liste von Wörterbüchern in Python zu behandeln
- 8. Beste Möglichkeit, Nachrichtenartikel in Android zu speichern?
- 9. Bessere Möglichkeit, Null-Werte in Android zu behandeln?
- 10. beste Möglichkeit, Datenbankeinschränkungsfehler zu fangen
- 11. Möglichkeit, String in Java zu behandeln
- 12. Beste Möglichkeit zum Cache-Daten in Android
- 13. beste Möglichkeit, ui Thread in Android zu aktualisieren
- 14. Der beste Weg, um Fehlermeldungen zu behandeln
- 15. Der beste Weg, boolesche Flags zu behandeln
- 16. Der beste Weg, JPA Merge zu behandeln?
- 17. Der beste Weg, um Fehler zu behandeln
- 18. Beste Möglichkeit, Bilder zu laden
- 19. Android - Beste Möglichkeit, mehrere Layout-Varianten zu speichern
- 20. Beste Möglichkeit, SparseBooleanArray in Bundle zu speichern?
- 21. Beste Möglichkeit, Beobachter in MVC zu benachrichtigen?
- 22. Beste Möglichkeit, Dienste in Knockout.js zu verwalten?
- 23. Der beste Weg, Anfragevariablen in Django zu behandeln
- 24. Was ist der beste Weg, Wörterbücher in Python zu behandeln?
- 25. Der beste Weg, Speicherzuweisung in C zu behandeln?
- 26. Was ist der beste Weg, ValueError in Python zu behandeln?
- 27. Der beste Weg, um Integer-Überlauf in C# zu behandeln?
- 28. Die beste Art, JavaScript in benutzerdefinierten Steuerelementen zu behandeln?
- 29. Was ist der beste Weg, Ausnahmen in Perl zu behandeln?
- 30. Die beste Methode, um das Zurückverhalten von DialogFragment zu behandeln?
Thanx Sachin, aber was, wenn Benutzer verweigern Erlaubnis nach Splash-Screen von den Einstellungen? also habe ich überall nachschauen. –
Dann müssen Sie jedes Mal überprüfen, ob die Erlaubnis erteilt wurde oder nicht. Wenn die Berechtigung verweigert wird, zeigen Sie die Toast-Berechtigung an und öffnen Sie den Berechtigungseinstellungsbildschirm. Überprüfen Sie, wie der Berechtigungsbildschirm http://stackoverflow.com/a/32983128/3416642 geöffnet wird – Sach