2016-10-05 99 views
-3

我有这个应用程序,将选择图片到画廊,并显示它到使用Imageview的测试。我的问题是它不会在Android M上工作。我可以选择图像,但不会在我的测试中显示。他们说我需要询问权限才能访问android M上的图像,但不知道如何。请帮忙。如何询问访问Android M上的图库的权限?

+0

问的问题在这里只是阅读开发商的网站一旦 – Piyush

回答

4

从Android 6.0(API级别23)开始,用户在应用程序运行时为应用程序授予权限,而不是在安装应用程序时授予应用程序权限。

类型1-当您的应用程序请求权限时,系统会向用户显示一个对话框。当用户响应时,系统会调用您的应用程序的onRequestPermissionsResult()方法,并将其传递给用户响应。您的应用必须重写该方法才能确定是否授予了该权限。该回调将传递给您传递给requestPermissions()的相同请求代码。

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; 
     } 
    } 

类型2-如果你想给运行时允许回在一个地方那时候你可以按照下面的链接

Android 6.0 multiple permissions

而且在清单中添加权限您的要求

<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" /> 

注 -如果Manife st.permission.READ_EXTERNAL_STORAGE产生错误,请将其替换为android.Manifest.permission.READ_EXTERNAL_STORAGE。

==>如果您想了解更多有关运行许可,则请按照下面的链接

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

+0

好感谢前。我会试试这个.. – Crissy

+1

如果你有WRITE_EXTERNAL_STORAGE,你不需要READ_EXTERNAL_STORAGE。 WRITE包含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" />