【问题标题】:Android ActivityNotFoundException failing to catch on Intent in OS 4.1.2 (works on 4.0.3)?Android ActivityNotFoundException 未能在 OS 4.1.2 中捕获 Intent(适用于 4.0.3)?
【发布时间】:2013-10-09 11:01:14
【问题描述】:

感谢您的观看。我是一个非常老的程序员,但对 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。

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

【问题讨论】:

    标签: java android android-intent exception-handling android-4.2-jelly-bean


    【解决方案1】:
    Intent intent = new Intent();
    

    需要成为:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    

    您将数据和 ActionCode 放入 Intent 中,但是您从未告诉它 Intent 的用途。

    【讨论】:

    • 下一行没有配置? (intent.setAction(Intent.ACTION_VIEW);)。我试过你的建议,它奏效了!我想知道为什么 setAction() 没有正确配置它。无论哪种方式,它现在都很好用,谢谢!
    • setAction() 方法用于将操作代码传递给 Activity。如果您有一个可以执行多个操作的自定义活动,您可以告诉它您需要它做什么,这将被使用。您需要使用 ACTION_VIEW 活动创建一个新 Intent。
    • 也许只是对这门语言太陌生,这似乎是“知情者”会理解的细微差别。如果您选择它的替代版本,例如指定活动而不是无参数的构造函数,则重载的构造函数必须简单地以不同的方式操作。 setActivity() 显然与在构造函数中设置 this 不同。据我所知,它确实修复了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多