如何在Android Kitkat中设置我的短信应用程序默认值?
我制作了一个安卓手机短信应用程序,在这个应用程序中,我可以像安卓手机短信应用程序那样发送和接收短信。现在我已经将目标设置为4.4(Android KitKat版本),但Android KitKat有新的“默认消息传递”应用程序设置,用户可以一次选择一个应用程序进行消息传递。我按照中的步骤为我的短信应用程序选择选项作为默认应用程序,但在设置中,我的应用程序从未出现在选择默认短信应用程序的弹出窗口中 下面是我在guid中使用的java代码如何在Android Kitkat中设置我的短信应用程序默认值?,android,sms,android-4.4-kitkat,Android,Sms,Android 4.4 Kitkat,我制作了一个安卓手机短信应用程序,在这个应用程序中,我可以像安卓手机短信应用程序那样发送和接收短信。现在我已经将目标设置为4.4(Android KitKat版本),但Android KitKat有新的“默认消息传递”应用程序设置,用户可以一次选择一个应用程序进行消息传递。我按照中的步骤为我的短信应用程序选择选项作为默认应用程序,但在设置中,我的应用程序从未出现在选择默认短信应用程序的弹出窗口中 下面是我在guid中使用的java代码 if( androidOS.contains("4.4")
if( androidOS.contains("4.4") ){
if (! Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName) ) {
// App is not default.
// Show the "not currently set as the default SMS app" interface
builder = new AlertDialog.Builder(MyConversation.this);
builder.setMessage("Shoot The Messenger is not set as your default messaging app. Do you want to set it default?")
.setCancelable(false)
.setTitle("Alert!")
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@TargetApi(19)
public void onClick(DialogInterface dialog, int id) {
Intent intent =
new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
getPackageName());
startActivity(intent);
}
});
builder.show();
}
}
我还在Manifest
文件中添加了下面的代码
<?xml version="1.0" encoding="utf-8"?>
更新:
注意:我正在Emulator上测试。。。
在完成所有步骤后,我只看到Android的默认消息应用程序,而不是我的,如下图所示。任何形式的帮助都将不胜感激。提前谢谢
您发布的内容是正确的-问题是您必须实现所有所需功能:
- 在广播接收器中,包括一个用于
(“SMS\u DELIVER\u ACTION
”)的意图过滤器。广播接收器还必须获得广播\u SMS许可。 这允许您的应用程序直接接收传入的SMS消息android.provider.Telephony.SMS\u DELIVER
- 在广播接收器中,包括用于
(“WAP\u PUSH\u DELIVER\u动作
”)的意图过滤器,MIME类型为“android.provider.Telephony.WAP\u PUSH\u DELIVER
”。广播接收器还必须需要广播WAP PUSH权限。 这允许您的应用程序直接接收传入的彩信application/vnd.WAP.mms message
- 在传递新消息的活动中,包括一个意向过滤器,用于带有模式的
(“ACTION\u SENDTO
”)、android.intent.ACTION.SENDTO
、smsto:
、和mms:
。 这允许您的应用程序接收来自其他希望传递消息的应用程序的意图mmsto:
- 在一项服务中,包括一个意向过滤器,用于通过消息(“
”)对android.intent.ACTION.RESPONSE\u VIA\u MESSAGE
,sms:
,smsto:
,和mms:
)模式进行过滤。此服务还必须具有mmsto:
权限SEND\u RESPOND\u VIA\u MESSAGE
如果没有全部四项要求,您的应用程序将不会列在默认短信选择对话框中。如果您没有实现所有四项要求,您的应用程序将不会列为默认短信应用程序。即使你的应用程序不支持彩信,你也必须将其添加到你的manifiest文件中。这并不意味着你必须为他们实施活动、服务或接收者。将这些添加到您的manifiest文件中,您的短信将作为默认短信应用程序列出。请随意忽略任何lint错误
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver android:name=".MmsReceiver"
android:enabled="@bool/is_kitkat"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<!-- Activity that allows the user to send new SMS/MMS messages -->
<activity android:name=".ComposeSmsActivity" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</activity>
<!-- Service that delivers messages from the phone "quick response" -->
<service android:name=".HeadlessSmsSendService"
android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
</service>
在android p上,他们改为角色管理器 现在是
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
val roleManager = getSystemService(RoleManager::class.java)
val roleRequestIntent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS)
startActivityForResult(roleRequestIntent, 12)
} else {
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivity(intent)
}
请参阅:谢谢您的回答我在我的应用程序中没有使用
MMS
,因此android.provider.Telephony.WAP\u PUSH\u DELIVER
我认为在我的情况下不需要它,而且我使用的是广播接收器
而不是服务
。因为只有一个默认的SMS应用程序,如果您不支持所有功能,则完全禁用部分用户功能,因此需要这样做。您好,每次我恢复、创建或重新启动应用程序时,是否可能不显示“获取sms应用程序默认值”对话框?因此,在后台自动更改它?@Nemka-如果应用程序可以在后台更改它,用户不会有太多偏好。查看我引用的链接,该链接解释了如何检测您是否为默认应用程序,并向用户指出可以将默认SMS应用程序设置为您的应用程序的位置。示例代码:假设您是对的,但我从未使用过名为MMSReceiver
的类,那么我们为什么需要此它不应该给您错误。你有没有试过,但没有成功?类别MMSReceiver
不存在。假设你想为彩信创建一个接收器,那么你必须实现它,但因为你的应用程序不支持彩信,所以你不必这样做。是的,清单链接检查器可能会抱怨类MMSReceiver
不存在,您可以忽略它。如果您没有在清单文件中实现所有四个要求,您的短信应用程序将不会像@ianhanniballake所说的那样在Android 4.4+上被列为默认短信应用程序。我已经尝试了您提到的所有四个步骤,但仍然收到了相同的输出。。。。。
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
val roleManager = getSystemService(RoleManager::class.java)
val roleRequestIntent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS)
startActivityForResult(roleRequestIntent, 12)
} else {
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, packageName)
startActivity(intent)
}