2017-03-13 5 views
-2

aufgerufen Ich versuche, den Benutzer zu aktivieren, um ihre externe Speicherberechtigung während der Laufzeit zu schreiben. Ich habe den folgenden Code verwendet. Es zeigt den Laufzeit-Erlaubnis-Dialog an. Wenn ich auf "Zulassen" oder "Ablehnen" klicke, wird die onReqestPermissionResult-Methode (Callback-Methode) nicht aufgerufen.onReqestPermissionResult nicht in android dynamische Erlaubnis

was muss ich dafür tun?

public class PermissionCheck extends Activity { 

    private static final String TAG = "PermissionCheck"; 

    private Fragment mFragment; 
    private Activity mActivity; 

    public PermissionCheck(Fragment fragment){ 
     mFragment = fragment; 
     mActivity = fragment.getActivity(); 
    } 

    public boolean isStoragePermissionGranted() { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
       return true; 
      } else { 
       ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
       return false; 
      } 
     } 
     else { 
      return true; 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
      Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]); 
     } 
    } 
} 
+0

Was ist diese PermissionCheck Activity? Wo sind onCreate und andere Lebenszyklusmethoden? Wo ist die Benutzeroberfläche? Warum brauchst du eine "Aktivität" nur für Berechtigungen? Wie nennen Sie diese Aktivität eigentlich? –

+0

ich rufe diese Aktivität nicht auf ... super.onRequestPermissionsResult (requestCode, permissions, grantResults); das muss die Aktivität ausweiten ... deshalb ... – Vji

Antwort

1

Sie sind eine weitere Aktivität der Instanz in requestPermissions vorbei, so die onRequestPermissionResult heißt in Ihrer mActivity und nicht in der PermissionCheck. Versuchen Sie, requestPermissions zu ändern:

ActivityCompat.requestPermissions(PermissionCheck.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
+0

Oh Mann ... total bin ich verwirrt. jetzt klar ... Danke Mann !!! – Vji

0

ersetzen:

ActivityCompat.requestPermissions(mActivity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 

mit:

ActivityCompat.requestPermissions(PermissionCheck.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 

Und ersetzen onRequestPermissionsResult() dazu:

@Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case 1: { 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(getActivity(), "Permission is granted", Toast.LENGTH_LONG).show(); 

       } else { 
        Toast.makeText(getActivity(), "Please give your permission.", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 
     } 
    }