如何获取操作的默认应用程序

the*_*nut 2 android

如何确定哪个应用程序是特定操作的默认应用程序?例如我想知道哪个应用程序用于拨打电话或接收短信。有什么方法可以以编程方式找出哪个应用程序设置为默认应用程序?

key*_*ser 5

PackageManager.resolveActivity会按照您正在寻找的内容执行某些操作。来自官方文档:

确定针对给定意图执行的最佳操作。如果未显式指定类,这就是resolveActivity(PackageManager) 查找活动的方式。

这是一个例子

Intent i = (new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com")));
PackageManager pm = context.getPackageManager();
final ResolveInfo mInfo = pm.resolveActivity(i, 0);
Toast.makeText(
    context, 
    pm.getApplicationLabel(mInfo.activityInfo.applicationInfo),
    Toast.LENGTH_LONG
).show();
Run Code Online (Sandbox Code Playgroud)

请注意,返回值有些模糊:

返回包含被确定为最佳操作的最终活动意图的 ResolveInfo。如果未找到匹配的活动,则返回 null。如果找到多个匹配的活动并且没有默认集,则返回包含其他内容(例如活动解析器)的 ResolveInfo。