Tag: android contentprovider

如何检查ContentProvider可用于Intent(或阻止特定的一个)

我使用Intent机制让用户通过标准的方式选择图像 val intent = Intent(Intent.ACTION_GET_CONTENT) intent.type = “image/*” intent.addCategory(Intent.CATEGORY_OPENABLE) ctx.startActivityForResult(intent, RequestCodes.SelectPhoto) 然后我将Uri传递给另一个活动,可能会裁剪照片。 我需要之前的Uri做一些预先检查。 在Android模拟器上,像Photos(默认)这样的默认提供程序会让我的整个应用程序有权打开Uri,而不仅仅是请求活动。 然而,在亚洲有一个“奇怪”的提供者, com.miui.gallery.provider.GalleryOpenProvider并没有 – 在com.miui.gallery.provider.GalleryOpenProvider器中发生了一个邪恶的SecurityException。 所以我尝试使用ACTION_OPEN_DOCUMENT,根据规范说,它会给我的整个应用程序权限,直到设备重新启动,但不幸的是,一个不支持在模拟器云中的谷歌照片。 所以我正在寻找一种方法来确定是否将列表中的com.miui.gallery.provider.GalleryOpenProvider在com.miui.gallery.provider.GalleryOpenProvider ,如果是这样,要么阻止它,否则回落到使用ACTION_OPEN_DOCUMENT。 我希望避免在把Uri交给收割机之前将其拷贝,作物活动无论如何都将其视为只读。 这是启动作物(kotlin)的全部function。 CropActivity是对旧版开源图库应用com.android.gallery3d的修改。 private fun startCrop(ctx: Activity, uri: Uri) { val intent = Intent(ctx, CropActivity::class.java) intent.data = uri val file = this.createImageFile(ctx, “photofinal”) if (file == null) { this.showStorageUnavailable(ctx) return } val outputUri = […]