如何以编程方式在Android中将短信应用设置为默认应用

osi*_*the 11 android

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

Gee*_*eek 6

据我了解,您需要在启动应用程序时要求用户将您的应用程序设置为默认消息传递应用程序。为此,请使用以下代码:

在下面设置intent-filter要显示的活动。在这种情况下,我考虑了“ DefaultSMSAppChooserActivity”

<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>
Run Code Online (Sandbox Code Playgroud)

调用以下方法可显示他/她的设备上所有可用的短信应用程序,包括您的默认设置。

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);
}
Run Code Online (Sandbox Code Playgroud)

您可以根据需要在任何地方使用以上方法。

希望这对您有帮助!!!


小智 5

你不能

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

无论如何,您都可以通过Intent-Filter注册应用程序以充当消息传递应用程序


小智 4

在您的清单文件中声明这一点

<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/sms" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

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