好吧,我有一个有自定义文件夹的应用程序:
我想打开以下类型:
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);
}
});
现在我该怎样过滤这个,以便用正确的程序打开正确的文件类型?
答案 0 :(得分:0)
阅读http://developer.android.com/guide/components/intents-filters.html,了解如何执行此操作的简介。从该页面上的“图像/”中搜索。
您需要在应用程序的清单文件中声明文件类型。请确保使用mimeType(如“image / *”或“image / png”)声明它们,以便您可以从其他应用程序(如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是内容类型而不是典型的文件类型。
答案 1 :(得分: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);