我想找到在Android应用程序管理器中设置了“默认启动”的包。应用程序管理器通常会说“此应用程序默认设置为打开某些操作”,并为这些包设置了“清除默认值”按钮。
例如,此图像显示Adobe的应用程序管理器页面,我已将其设置为打开PDF文件的默认设置。我希望能够以编程的方式确定此包(com.adobe.reader)是否具有“默认启动”集,以及更一般的具有“默认启动”集的所有包。(显然,应用程序管理器可以做到这一点。)

我可以通过以下方式获得所有已安装的软件包:
List packages = getPackageManager() .getInstalledPackages(0);
我如何知道哪些是“默认启动”设置?有什么办法也能找到行动吗?
谢谢。
发布于 2014-01-02 22:45:11
这似乎适用于我:
/**
* Get info on the preferred (launch by default) applications.
* @return
*/
public String getPreferredAppInfo() {
List<PackageInfo> packages = getPackageManager()
.getInstalledPackages(0);
List<IntentFilter> filters = new ArrayList<IntentFilter>();
List<ComponentName> activities = new ArrayList<ComponentName>();
String info = "";
int nPref = 0, nFilters = 0, nActivities = 0;
PackageInfo pkg = null;
for (int i = 0; i < packages.size(); i++) {
pkg = packages.get(i);
nPref = getPackageManager().getPreferredActivities(filters,
activities, pkg.packageName);
nFilters = filters.size();
nActivities = activities.size();
if (nPref > 0 || nFilters > 0 || nActivities > 0) {
// This is a launch by default package
info += "\n" + pkg.packageName + "\n";
for (IntentFilter filter : filters) {
info += "IntentFilter:\n";
for (int j = 0; j < filter.countActions(); j++) {
info += " action: " + filter.getAction(j) + "\n";
}
for (int j = 0; j < filter.countCategories(); j++) {
info += " category: " + filter.getCategory(j) + "\n";
}
for (int j = 0; j < filter.countDataTypes(); j++) {
info += " type: " + filter.getDataType(j) + "\n";
}
for (int j = 0; j < filter.countDataAuthorities(); j++) {
info += " data authority: "
+ filter.getDataAuthority(j) + "\n";
}
for (int j = 0; j < filter.countDataPaths(); j++) {
info += " data path: " + filter.getDataPath(j)
+ "\n";
}
for (int j = 0; j < filter.countDataSchemes(); j++) {
info += " data path: " + filter.getDataScheme(j)
+ "\n";
}
// for (ComponentName activity : activities) {
// info += "activity="
// + activity.flattenToString() + "\n";
// }
}
}
}
return info;
}PackageManager.getPreferredActivities()的返回值似乎为零,而不是注册的首选活动的总数。如果不是总是零,检查非零就足以判断包是否有“默认启动”集。我还发现PackageManager.getPreferredPackages()总是为我返回零。我还发现,对于过滤器和活动(如Javadoc中提到的)给出的PackageManager.getPreferredActivities() NullPointerException,传递null。
发布于 2013-12-28 18:08:12
将PackageManager.getLauncherIntent(字符串packageName)用于包的默认主启动程序活动.
发布于 2013-12-28 18:15:38
检查下面的代码
// intents array list has all the launcher intents
List<PackageInfo> packages = getPackageManager()
.getInstalledPackages(0);
Intent intent = null;
for (Iterator iterator = packages.iterator(); iterator.hasNext();)
{
PackageInfo packageInfo = (PackageInfo) iterator.next();
String packageName = packageInfo.packageName;
// adobe reader example is taken.
if(packageName.equals(com.adobe.reader))
{
intent =getPackageManager().getLaunchIntentForPackage(packageName));
break;
}
}
if(intent != null)
{
startActivty(intent);
}或您可以尝试使用此链接获取pdf文件 链接
https://stackoverflow.com/questions/20817606
复制相似问题