3

谢谢参观。我是一个非常老的程序员,但对 Android/Java 绝对是新手。虽然我还没有找到一种方法让代码在这里变得丰富多彩和漂亮;)。

我正在启动一个活动来打开一个带有伪造/假扩展名(mime 类型)的文件,所以我可以强制这个ActivityNotFoundException异常(测试)。

不知何故,我的三星 Galaxy S3 ( OS 4.1.2 ) 上从未发生过此异常。Adobe Reader 打开并错误提示该文件不是 PDF(它不是)。然而,在运行 4.0.3 的旧 ASUS Transformer 平板电脑上,异常被正确捕获。

有问题的代码是这样的:

// this file exists (check omitted).. 
File docFile = new File("/path/to/file.bogusextension");

// intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

// getting doc Uri
Uri fileUri = Uri.fromFile(docFile);

// getting doc mimeType
MimeTypeMap mime = MimeTypeMap.getSingleton();
String extension = MimeTypeMap.getFileExtensionFromUrl(fileUrl);
String mimeType = mime.getMimeTypeFromExtension(extension);

intent.setDataAndType(fileUri, mimeType);

// this is for an adobe native extension, just getting FREContext
// in the class below and mapping functions
DocLauncherExtensionContext extensionContext = (DocLauncherExtensionContext) context;
Activity activity = extensionContext.getActivity();

try
{
    activity.startActivity(intent);                 
}
catch (ActivityNotFoundException e) 
{
    Toast.makeText(context.getActivity(), "This never happens!", Toast.LENGTH_LONG).show();                 
}

这段代码有什么明显的错误会允许一个带有任何扩展名的文件不断地被扔到 Adob​​e Reader 上吗?我已经清除了我的默认值(设置-> 应用程序管理器-> 重置)。我 startActivity 的所有内容都只是投向 Adob​​e Reader。

任何想法表示赞赏!谢谢!

4

1 回答 1

2
Intent intent = new Intent();

需要变成:

Intent intent = new Intent(Intent.ACTION_VIEW);

您将数据和 ActionCode 放入意图中,但是您从未告诉它它的意图是什么。

于 2013-10-02T21:56:34.973 回答