0

在我的应用程序中,当用户在'ImageView'上按下时,我创建一个选择器意图,将促进用户更改图片。覆盖选择器意图行为

这里是我使用的代码时,在ImageView的用户点击

userProfileIMG.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      photoPickerIntent.setType("image/*"); 

      Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      if (takePhotoIntent.resolveActivity(getPackageManager()) != null) 
      { 
       try 
       { 
        photoFile = Create_ImageFile(); 
       } 
       catch (Exception e) 
       { 
        Log.e("file", e.toString()); 
       } 
       if (photoFile != null) 
       { 
        takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile.getAbsoluteFile())); 
       } 
      } 

      String pickTitle = getString(R.string.select_or_take_new_picture); 
      Intent chooserIntent = Intent.createChooser(photoPickerIntent, pickTitle); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{takePhotoIntent}); 

      startActivityForResult(chooserIntent, ACTIVITY_SELECT_PICTURE); 
     } 
    }); 

这是结果

enter image description here

我的问题是,当上“画廊”用户请选择6.0上的图像它的安全例外,因为我想请求<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>只有当他按'画廊'有什么方法来覆盖用户按'画廊'时的行为,以便我请求权限,然后如果他被授予我让他继续去画廊否则我否认他? 或者我必须手动构建相同的选择器,而不取决于系统为我构建对话框?

+0

相机需要许可。您需要请求动态访问摄像头的权限。 –

+0

更好的方法是在用户进入配置文件页面时请求权限。仅在授予Camera和EXTERNAL_STORAGE权限时才显示对话框以选择选项。 –

+0

@RaguSwaminathan我不能访问相机,我让相机自己拍照,并且不需要许可。 实际上,这是您让系统应用程序为您完成工作的权限的方式。 更多https://developer.android.com/training/permissions/best-practices.html –

回答

0

在Android 6.0及以上版本中从外部存储器写入和读取需要动态请求权限。这是一个在android 6.0以后版本[Marshmallow]中引入的特殊功能。

虽然你声明的

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
在Android清单

,在Android 6.0上运行时,会检查是否存在授予您的应用程序写入到外部存储权限。 [请参阅设置 - >应用程序中的应用程序权限详细信息 - > youapp - >权限]。如果它被禁用,你可能会遇到崩溃。

,并了解更多详情检查android developer portal

也可参考下面的帖子,会给你一些想法。

Storage permission error in Marshmallow

Android 6.0 Marshmallow. Cannot write to SD Card

更新:通过访问意图还需要实行许可制度。 Image from Gallery in Android 6(Marshmallow)

让我知道的查询。

+0

我知道这一点,我的问题与如何申请Android 6.0的权限无关012但是,而是问如何检测用户何时按下“图库”,因此我可以问问渗透。 –

+0

你试图读取设备存储? –

+0

是的,我正在尝试,我知道它需要6.0的运行时权限,但我的问题不是如何请求访问设备存储的权限。 我的问题是另一个不同的话题,请仔细阅读我的问题以及我要求的 –