2016-10-05 5 views
-3

Ich habe diese App, die Bild in Galerie auswählen und es mit Imageview zum Test anzeigen wird. Mein Problem ist, dass es auf Android M nicht funktioniert. Ich kann Bild wählen, aber werde nicht auf meinem Test zeigen. Sie sagen, dass ich Erlaubnis fragen muss, um auf Bilder auf android M zuzugreifen, aber weiß nicht wie. bitte hilfe.Wie um Erlaubnis zu fragen, auf Galerie auf Android M. zugreifen?

+0

Bevor Entwickler lesen Frage stellen hier nur Websites einmal – Piyush

Antwort

4

Ab Android 6.0 (API-Stufe 23) gewähren Benutzer Berechtigungen für Anwendungen, während die App ausgeführt wird, nicht wenn sie die App installieren.

Typ 1- Wenn Ihre App Berechtigungen anfordert, zeigt das System dem Benutzer ein Dialogfeld an. Wenn der Benutzer antwortet, ruft das System die onRequestPermissionsResult() -Methode Ihrer App auf und übergibt ihr die Benutzerantwort. Ihre App muss diese Methode überschreiben, um herauszufinden, ob die Berechtigung gewährt wurde. Dem Rückruf wird derselbe Anforderungscode übergeben, den Sie an requestPermissions() übergeben haben.

private static final int PICK_FROM_GALLERY = 1; 

ChoosePhoto.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick (View v){ 
    try { 
     if (ActivityCompat.checkSelfPermission(EditProfileActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(EditProfileActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PICK_FROM_GALLERY); 
     } else { 
      Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(galleryIntent, PICK_FROM_GALLERY); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
}); 


@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) 
    { 
     switch (requestCode) { 
      case PICK_FROM_GALLERY: 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        startActivityForResult(galleryIntent, PICK_FROM_GALLERY); 
       } else { 
        //do something like displaying a message that he didn`t allow the app to access gallery and you wont be able to let him select from gallery 
       } 
       break; 
     } 
    } 

Typ 2- Wenn Sie Runtime-Erlaubnis an einem Ort zurück, um wieder geben, dann können Sie folgenden Link folgen

Android 6.0 multiple permissions

Und in Manifest hinzufügen, die Erlaubnis für Ihre Anforderungen

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

Hinweis- Wenn Manife st.permission.READ_EXTERNAL_STORAGE Fehler erzeugen, dann bitte ersetzen Sie dies durch android.Manifest.permission.READ_EXTERNAL_STORAGE.

==> Wenn Sie mehr über Runtime-Erlaubnis wissen wollen, dann

untenstehenden Link folgen Sie bitte

https://developer.android.com/training/permissions/requesting.html

+0

okay, danke. Ich werde versuchen, dies .. – Crissy

+1

Sie brauchen nicht READ_EXTERNAL_STORAGE, wenn Sie WRITE_EXTERNAL_STORAGE haben. WRITE enthält READ. –

0
public void pickFile() { 
     int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), 
       CAMERA); 
     if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(
        getActivity(), 
        new String[]{CAMERA}, 
        PERMISSION_CODE 
      ); 
      return; 
     } 
     openCamera(); 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], 
              @NonNull int[] grantResults) { 
     if (requestCode == PERMISSION_CODE) { 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       openCamera(); 
      } 
     } 
    } 

    private void openCamera() { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, CAMERA_CODE); 
    } 

Add permissions in Manifest Also 
<uses-permission android:name="android.permission.CAMERA" /> 
Verwandte Themen