Android - 以编程方式获取默认DIAL和CALL应用程序

时间:2017-09-18 10:10:25

标签: android

美好的一天!我需要找出哪些应用程序(包名称)负责号码拨号和呼叫。

我做了类似

的事情
Intent dialIntent = new Intent();
dialIntent .setAction(Intent.ACTION_DIAL); //or ACTION_CALL
ComponentName compName = dialIntent .resolveActivity();

对于这两个动作(ACTION_DIAL和ACTION_CALL),我使用getPackageName()==“com.android.telephony”获取组件,但我知道,我的拨号器是com.android.dialer,我的调用通过com。 android.phone。那么我怎样才能获得默认应用程序的包名?

2 个答案:

答案 0 :(得分:0)

要获取系统默认的拨号程序应用程序包名称,请使用以下代码:

// This method will return system dialer app package name,
// as system dialer app is always at index 0.
private String getSystemDialerApp() {
        Intent dialerIntent = new Intent(Intent.ACTION_DIAL).addCategory(Intent.CATEGORY_DEFAULT);
        List<ResolveInfo> mResolveInfoList = getPackageManager().queryIntentActivities(dialerIntent, 0);
        return mResolveInfoList.get(0).activityInfo.packageName;
    }

如果要列出可以拨打电话的应用程序列表,请使用以下代码,如下所示:

// This method will return package name of all dialer apps.
public List<String> getPackagesOfDialerApps(Context context){

    List<String> packageNames = new ArrayList<>();

    // Declare action which target application listen to initiate phone call
    final Intent intent = new Intent();
    intent.setAction(Intent.ACTION_DIAL);
    // Query for all those applications
    List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0);
    // Read package name of all those applications
    for(ResolveInfo resolveInfo : resolveInfos){
        ActivityInfo activityInfo = resolveInfo.activityInfo;
        packageNames.add(activityInfo.applicationInfo.packageName);
    }

    return packageNames;
}

希望这可以解决您的目的!

答案 1 :(得分:0)

您可能要检查TelecomManager。看起来TelecomManager.getDefaultDialerPackage是您想要的。另外,您还可以收听Intent ACTION_DEFAULT_DIALER_CHANGED,该值将在每次更改默认拨号器时发送出去。