我正在努力恢复KITKAT上的短信.参考这篇文章,我添加了将我的应用程序设置为SMS的默认应用程序所需的内容.在清单文件中添加所有必需的东西后,我编写了以下代码:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mDefaultSmsApp = Telephony.Sms.getDefaultSmsPackage(mContext); Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, mContext.getPackageName()); mContext.startActivity(intent); }
上面的代码显示了这个对话框,但我无法从用户点击Yes或No的活动/对话框中获得结果,因为我想添加监听器或获取任何代表用户点击这些按钮的代码.谢谢.
要做到这一点的方法之一是火的意图startActivityForResult()
,然后检查resultCode
的onActivityResult()
方法.请注意,我已将示例中的代码更改为在Activity的Context中运行.
private static final int DEF_SMS_REQ = 0; private String mDefaultSmsApp; ... if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mDefaultSmsApp = Telephony.Sms.getDefaultSmsPackage(this); if (!getPackageName().equals(mDefaultSmsApp)) { Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName()); startActivityForResult(intent, DEF_SMS_REQ); } } ... @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case DEF_SMS_REQ: boolean isDefault = resultCode == Activity.RESULT_OK; ... } }
如下面的评论所述,显然检查结果代码并非100%可靠.更安全的检查是简单地将您的应用程序包名称与当前默认值进行比较onActivityResult()
.根本没有必要检查结果代码,例如评论中显示的答案.
String currentDefault = Sms.getDefaultSmsPackage(this); boolean isDefault = getPackageName().equals(currentDefault);