Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓10:动作视图被破坏_Android_Image_Android Intent - Fatal编程技术网

Android 安卓10:动作视图被破坏

Android 安卓10:动作视图被破坏,android,image,android-intent,Android,Image,Android Intent,我的应用程序的一位用户报告说,升级到Android 10后,他的设备上的我的应用程序停止显示图像 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setType("image/*"); intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setData(scannedU

我的应用程序的一位用户报告说,升级到Android 10后,他的设备上的我的应用程序停止显示图像

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("image/*");
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setData(scannedUri);
startActivity(intent);
我有“targetSdkVersion 28”,因此新的作用域存储规则不应运行。 我仍然将“compilesdkversion29”放在清单文件中:

android:requestLegacyExternalStorage="true"
我的用户仍然只有一个空屏幕,而他可以看到Android 10之前的图像:

我认为图像扩展.jpeg、.jpg或其他

意向意向=新意向(意向.行动\视图); intent.setType(“图像/jpeg”); intent.addFlags(intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | intent.FLAG_GRANT_READ_URI_PERMISSION); intent.setData(scannedUri); 星触觉(意向)

例如,如果你这样通过

Uri imageUri = Uri.parse("http://www.android.com");
Intent imageIntent = new Intent(Intent.ACTION_VIEW, imageUri);
默认情况下,系统根据包含的Uri数据确定意图所需的适当MIME类型。 设置MIME类型进一步指定应该接收意图的活动类型

例如,如果您想使用ACTION_VIEW
Intent
显示图像,则应指定一种类型的
image/*
。这将阻止(某人)在可以“查看”其他类型数据的应用程序(如地图应用程序)中执行由意图触发的操作


我希望它能对你有所帮助。

我也有同样的问题,而且

<external-path name="pics" path="/" /> (used with FileProvider)
为我解决了这个问题(我使用的是SDK版本28)


我只是想说谢谢你提出这个问题,并提供了READ_URI_权限标志代码,没有它,我无法让它工作,我尝试了10种不同的东西

第一步是使用具体的MIME类型。您向其他应用程序提供的是您的内容,因此您的工作是为该内容提供实际的MIME类型。如果这没有帮助,您的问题可能来自于
scannedUri
是什么。@commonware感谢您的快速回复!即使不使用setType()方法,也能唤起这种意图。scannedUri实际上是来自调用的Uri:MediaScannerConnection.scanFile()在其Listener中我不确定外部存储是否可以被索引,而且我以前从未尝试使用
scanFile()
返回的
Uri
。您可以考虑添加<代码>文件提供者< /代码>,并在短期内使用它来服务您的内容。长期而言,您无法访问
getExternalStoragePublicDirectory()
,因此需要执行其他操作。如果您是指
MediaStore
,是的,对于媒体,这是保存内容的一种方法。存储访问框架(
ACTION\u OPEN\u DOCUMENT
and friends)是另一个。“它现在过时了吗?”——是的,因为它不是Android 10+的最新版本。如果忽略
MediaScannerConnection
内容,您的
android:requestLegacyExternalStorage=“true”
将允许
getExternalStoragePublicDirectory()
继续工作。我只是不确定
MediaScannerConnection
如何与Android 10上的传统外部存储配合使用,更不用说是否通过回调获得可用的
Uri
。如果您切换到对
Uri
源代码使用
FileProvider
,则可以在短期内保持其余实现的完整性。在Android 10之前,即使没有此调用,代码也能正常工作:intent.setType(“image/*”);如果在intent中不包含Uri,通常应该使用setType()指定与intent关联的数据类型。我确实包含一个Uri--scanneduri它在10以下的所有Android版本中都是这样工作的。问题在于Android 10或特定设备上的it实现
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);