我正在恢复在KITKAT上的SMS。参考本文,我添加了将我的应用程序设置为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);
}
上面的代码显示了此对话框,但是我无法从此活动/对话框中获得结果,或者用户单击“是”或“否”,因为我想添加侦听器或获取任何表示用户单击这些按钮的代码。谢谢。
一种方法是使用激发Intent startActivityForResult()
,然后检查resultCode
inonActivityResult()
方法。请注意,我已更改示例中的代码以在活动的上下文中运行。
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句