gpt4 book ai didi

java - 使用指定的应用程序打开未知的文件类型

转载 作者:行者123 更新时间:2023-12-01 14:41:45 24 4
gpt4 key购买 nike

我使用此代码使用指定的应用程序打开文件:

File file = new File("/path/to/file.ext");
if(file.exists())
{
Uri path=Uri.fromFile(file);

Intent intent=new Intent(Intent.ACTION_VIEW, path);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setPackage("com.example.myapp");
MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext=file.getName().substring(file.getName().indexOf(".")+1);
String type = mime.getMimeTypeFromExtension(ext);

intent.setDataAndType(Uri.fromFile(file),type);


try
{
startActivity(intent);
}
catch(ActivityNotFoundException e)
{
Toast.makeText(this, "No software found", Toast.LENGTH_SHORT).show();
}

它可以完美地处理 .zip 文件,但不能处理非常规的文件扩展名,它会抛出 AcivityNotFoundException。有没有办法以编程方式将文件类型与应用程序关联,或强制应用程序打开给定的文件?

最佳答案

正确的做法是:

List<ResolveInfo> resInfo = packageManager.queryIntentActivities(intent, flags);
if(resInfo !=null && resInfo.size()>0) {
//Display the activity list that can handle this file format
} else {
//Handle this file by your own code or display error message
}

如果系统中任何已安装的应用程序甚至您自己的程序显然无法处理某个文件,那么您只需显示一条错误消息。这是一个异常处理。

如果您 100% 确定该应用程序可以打开该文件 - 打开该应用程序,系统会提示我一个文件选择器,您可以打开该具有未知扩展名的文件 - 好吧,如果目标应用程序不这样做,这可能是不可能的提供此接口(interface)以通过 Intent 获取文件输入,并且您无法劫持它。或者,您可以使用 sysdump 工具或层次结构查看器来查看目标应用程序是否使用单独的 Activity 来处理从文件选择器中选择的文件。如果这样做,您可能仍然无法将文件发送给它,因为 Activity 可能无法导出。尝试使用 apk-tool 和 java-decompiler 反编译目标应用程序,看看是否有运气。

关于java - 使用指定的应用程序打开未知的文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com