我有一个应用程序通过共享功能从其他应用程序接收单个或多个图像文件。单个文件共享intent-filter工作没有问题,但是多个文件我遇到了一些问题。如果我选择图像和任何其他mime类型的组合,比如说PDF,那么共享选项会列出我的应用程序。我编写了intent-filter来只接受JPEG和PNG。如果在要共享的文件列表中未选择任何图像,则我的应用程序未列出,但它是图像和困扰我的其他文件的组合。下面是我写的意图过滤器。
<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时避免列出我的应用。感谢帮助!
答案 0 :(得分:1)
经过大量的应用程序后发现不同的应用程序正在以不同的方式处理隐式意图。
我有不同行为的所有这些组合。我认为解决这个问题的最佳方法是在我的应用程序中处理文件。所以这就是我写的 -
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被删除的情况。不想得到NullPointers。希望这有助于某人!