Android 以编程方式更改;默认情况下用于此操作;

Android 以编程方式更改;默认情况下用于此操作;,android,Android,我有普通的“电话”拨号器和新的“拨号器”应用程序。现在,如果我选中“默认使用此操作”并单击“拨号器”应用程序,那么每次按下电话按钮时,“拨号器”应用程序都会自动启动。但是我怎样才能在代码中更改它呢 此首选项存储在哪里 这是如何映射的?这是由android操作意图字符串映射的吗 例如,Intent.ACTION_调用与某些应用程序配对,例如,“拨号器”应用程序是默认应用程序,每次调用Intent.ACTION_时都会启动该应用程序 谢谢 您不能使用应用程序更改默认应用程序 但您可以通过intent

我有普通的“电话”拨号器和新的“拨号器”应用程序。现在,如果我选中“默认使用此操作”并单击“拨号器”应用程序,那么每次按下电话按钮时,“拨号器”应用程序都会自动启动。但是我怎样才能在代码中更改它呢

此首选项存储在哪里

这是如何映射的?这是由android操作意图字符串映射的吗

例如,Intent.ACTION_调用与某些应用程序配对,例如,“拨号器”应用程序是默认应用程序,每次调用Intent.ACTION_时都会启动该应用程序

谢谢


您不能使用应用程序更改默认应用程序 但您可以通过intent转到应用程序的设置页面来设置默认值

Intent i = new Intent(android.provider.Settings.Aplications);
startActivity(i);

或者类似这样的内容

从API 21开始,您可以使用next intent要求用户成为默认拨号程序:

    Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER)
        .putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
    if (intent.resolveActivity(getPackageManager()) != null) {
      startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);
    } else {
      Log.w(getLocalClassName(), "No Intent available to handle action");
    }

致命异常:主E/AndroidRuntime(3043):android.content.ActivityNotFoundException:找不到处理意图的活动{act=android.provider.Settings.Applications}是thrownIntent i=new Intent(android.provider.Settings.ACTION\u所有应用程序);星触觉(i);找不到处理意图的活动{act=android.provider.Settings.ACTION\u ALL\u APPS}我是否缺少某些权限?你试过这个吗?
 @RequiresApi(api = Build.VERSION_CODES.M)
    private void chnagedialer() {
        TelecomManager systemService = this.getSystemService(TelecomManager.class);
        if (systemService != null && !systemService.getDefaultDialerPackage().equals("com.android.contacts")) {
            startActivity((new Intent(ACTION_CHANGE_DEFAULT_DIALER)).putExtra(EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,"com.android.contacts" ));
        }

    }