gpt4 book ai didi

android - 从其他应用程序接收多个文件无法按预期工作

转载 作者:行者123 更新时间:2023-11-30 01:42:21 25 4
gpt4 key购买 nike

我有一个应用程序可以通过共享功能从其他应用程序接收单个或多个图像文件。单个文件共享 intent-filter 可以正常工作,但对于多个文件,我遇到了一些问题。如果我选择图像和任何其他 mime 类型的组合,例如 PDF,则共享选项会列出我的应用程序。我编写了 intent-filter 以仅接受 JPEG 和 PNG。如果在要共享的文件列表中没有选择图像,那么我的应用程序不会列出,但它是图像和其他文件的组合,这让我很困扰。下面是我写的 intent-filter。

       <intent-filter android:icon="@mipmap/ic_print_file_receiver"
android:label="@string/app_name">
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/png" />
</intent-filter>

谁能帮我解决这个问题?当我们选择了非 JPEG/PNG 文件时,我想避免列出我的应用程序。感谢您的帮助!

最佳答案

如果发现不同的应用程序以不同的方式处理隐式 Intent ,那么在检查了很多应用程序之后。

  • 我发现 ESExplorer 会完全忽略 intent-filter。如果我选择两个 PDF 并共享我会看到我的打印机列出,这完全违反我的 mime 类型设置(在我的问题上面显示)。
  • 另一个名为 BlackMoon 文件资源管理器的文件资源管理器应用程序做了正确的事情,并且仅当我将所有选定的应用程序都设置为 JPEG 或 PNG 时,它才会在我共享时显示我的应用程序。即使我只有一个 JPEG 或 PNG 文件以外的文件,我的应用程序也不会列在应用程序列表中。
  • 我的 LG Nexus 5 上的 Google 下载出现了一些奇怪的情况。如果我只选择除图像以外的任何其他 PDF 后共享,我的应用程序将不会列出,但它会列出我选择的组合的应用程序。就像我选择了一个 JPEG、两个 PDF、一个 .HTML 文件等。它只需要在要共享的文件列表中至少有一个 JPEG 或 PNG。

我有所有这些不同行为的组合。我认为处理此问题的最佳方法是在我的应用程序中对文件进行门控。所以这是我写的-

if (Intent.ACTION_SEND_MULTIPLE.equals(receivedIntent.getAction()) && receivedIntent.getType() != null){

String type = receivedIntent.getType();
ArrayList<Uri> filesListTemp = new ArrayList<>(filesList);
// MimeTypes.ALL is */* - the mimetype passed when multiple files are passed as the shared received intent. If only Images then it would be image/*.
if(TextUtils.equals(type, MimeTypes.ALL)){
// Here filesListTemp is getIntent().getExtras().getParcelableArrayList(Intent.EXTRA_STREAM);
for(Uri fileURI : filesListTemp){
String mimeType = getActivity().getContentResolver().getType(fileURI);
Log.d(TAG, "mimeType of the file : " + mimeType);
if(mimeType != null){
if(!TextUtils.equals(mimeType, MimeTypes.JPG) && !TextUtils.equals(mimeType, MimeTypes.PNG)){
filesList.remove(fileURI);
}
} else {
String filePath = fileURI.getPath().toLowerCase();
if (!filePath.endsWith(".jpg") && !filePath.endsWith(".jpeg") && !filePath.endsWith(".png")) {
filesList.remove(fileURI);
}
}
}

不要忘记处理删除所有 fileURI 的情况。不想获得空指针。希望这对某人有帮助!

关于android - 从其他应用程序接收多个文件无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com