0

好的,所以我有一个具有自定义文件夹的应用程序:

我想打开以下类型:

protected String[] acceptableTypes = {"jpg", "gif", "png", "bmp", "pdf", "txt"};

每当我单击文件时,我都可以使用以下代码打开图像或至少 jgps:

MediaScannerConnection.scanFile(((Activity) getContext()), new String[] { filePath }, null, 
                new MediaScannerConnection.OnScanCompletedListener() { 
            @Override public void onScanCompleted(String path, Uri uri) { 
                Intent intent = new Intent(Intent.ACTION_VIEW); 
                intent.setDataAndType(uri, "image/*"); 
                ((Activity) getContext()).startActivityForResult(intent, ConferenceActivity.ACTIVITY_SELECT_IMAGE); 
            } 
        });

现在我该如何过滤它以便我可以使用正确的程序打开正确的文件类型?

4

2 回答 2

0

阅读http://developer.android.com/guide/components/intents-filters.html了解如何执行此操作的介绍。从该页面上的“image/”搜索。

您需要在应用程序的清单文件中声明文件类型。请务必使用“image/*”或“image/png”之类的 mimeType 声明它们,以便您可以从 gmail 等其他应用程序打开文件。

在您的活动中,您将添加如下内容:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <data android:mimeType="image/*" />
</intent-filter>

另一个问题是您还必须同时处理“文件”方案和“内容”方案。要查看我的意思,在 Jellybean 中打开 Gmail 中的文件,您会看到提供的 URI 是内容类型,而不是典型的文件类型。

于 2013-01-27T21:16:33.767 回答
0

您只需在 setDataAndType 中传递正确的 mimeType。您可以使用 URLConnection.guessContentTypeFromName 获取文件的 mimeType

所以是这样的:

Intent i = new Intent();
i.setAction(android.content.Intent.ACTION_VIEW);
String mimeType = URLConnection.guessContentTypeFromName(filePath);
i.setDataAndType(Uri.fromFile(new File(filePath)), mimeType);
startActivity(i);
于 2013-01-30T18:51:25.277 回答