如何以编程方式将sms应用程序设置为android中的默认应用程序

如何以编程方式将sms应用程序设置为android中的默认应用程序,android,Android,我开发了一个android应用程序,用于接收特定号码的短信。它可以将短信标记为从该号码读取。要将sms标记为已读,需要将应用程序设置为默认值。如何以编程方式将android中的应用程序设置为默认应用程序 在清单文件中声明此项 <intent-filter > <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFA

我开发了一个android应用程序,用于接收特定号码的短信。它可以将短信标记为从该号码读取。要将sms标记为已读,需要将应用程序设置为默认值。如何以编程方式将android中的应用程序设置为默认应用程序

在清单文件中声明此项

<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/sms" />
</intent-filter>


我不确定mime类型,但请检查消息的正确mime类型,因为它非常重要。

您可以从所有google messenger复制粘贴清单,以检查它是否正常工作


你不能

第三方开发者无法将自己的应用程序设置为默认应用程序。只有应用程序的用户才能在自己的设备上执行此操作


无论如何,您可以通过intent filter注册您的应用程序作为消息传递应用程序,因为我知道您需要在启动应用程序时要求用户将您的应用程序设置为默认消息传递应用程序。为此,请使用以下代码:

将下面的
intent filter
设置为要显示的活动。在本例中,我考虑了“DefaultsMSAPChooserActivity”

根据您的要求,您可以在任何地方使用上述方法


希望这对你有帮助

您可以直接生成框架对话框,要求将您的应用程序作为默认的消息传递应用程序,从应用程序内部,使用以下
Intent
startActivity
:-

startActivity(Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT).putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName))

你不能强迫这样做,你不应该这样做。你可以做的是让别人知道你的应用程序可以打开文件类型。用户将获得标准的“您希望使用什么程序”对话框,用户可以选择一些作为默认值。如果用户已经选择了默认设置,他/她需要在对话框出现之前撤销该设置(显然,否则“默认设置”不会有太大效果,是吗?

我想没有用户的同意,你不能这样做。我想在用户同意的情况下这样做。不,仅在你的清单中是允许的,但这需要用户权限。在用户同意的情况下,这是绝对允许的。但您必须在应用程序中实现所有功能,才能符合默认应用程序的资格。例如:如果你的应用程序中没有撰写消息的功能,你怎么可能将其设为默认值。
<activity android:name=".DefaultSMSAppChooserActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.APP_MESSAGING" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
public static void openSMSappChooser(Context context) {
    PackageManager packageManager = context.getPackageManager();
    ComponentName componentName = new ComponentName(context, DefaultSMSAppChooserActivity.class);
    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

    Intent selector = new Intent(Intent.ACTION_MAIN);
    selector.addCategory(Intent.CATEGORY_APP_MESSAGING);
    selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(selector);

    packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
}
startActivity(Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT).putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName))