使用第三方应用的软件包名称打开文件
问题描述:
我想打开一个文件让我们说xxx.pdf在特定的查看器中。我正在使用查看器的信息使用第三方应用的软件包名称打开文件
List<ResolveInfo> resolveInfoList = activity.getPackageManager()
.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
ResolveInfo提供了支持查看器的完整信息。从那里我得到包名称,活动等。
现在我想使用包名称启动文件。我正在尝试下面的代码。
Intent supportedAppIntent = packageManager.getLaunchIntentForPackage(packageName);
supportedAppIntent.setAction(ACTION_VIEW);
supportedAppIntent.setDataAndType(Uri.fromFile(file), contentType);
activity.startActivity(supportedAppIntent);
但它只打开应用程序,而不是文件。
答
我找到了答案。缺少行是intent.setClassName(packageName, className);
的className你可以从resolveInfo.activityInfo.name;
获得它下面是完整的代码。
Intent intent = new Intent(ACTION_VIEW);
intent.setClassName(packageName, classname);
intent.setDataAndType(Uri.fromFile(file), contentType);
activity.startActivity(supportedAppIntent);
可能问题是意图 - 过滤器没有解决。所以首先检查使用IntentChooser应用程序出现或不在可用的应用程序列表,这是可以打开查看pdf文件类型 –
应用程序可用,因为我从queryIntentAcitivities(),我可以得到所有的细节,应用程序也启动。但问题是,它不打开文件。理想情况下应该通过打开文件启动应用程序。 –