我正在努力在KITKAT上恢复短信。参考此article我添加了将我的应用程序设置为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中获取此活动/对话框的结果,因为我想添加监听器或获取任何代表用户点击这些按钮的代码。 感谢。
答案 0 :(得分:10)
执行此操作的一种方法是使用startActivityForResult()
触发Intent,然后检查resultCode
方法中的onActivityResult()
。请注意,我已将示例中的代码更改为在Activity的上下文中运行。
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);
答案 1 :(得分:0)
你可以做出反应的方式"是"按钮点击:
private String mDefSmsPackage;
@Override
public void onCreate(@Nullable Bundle state) {
//...
mDefSmsPackage = Telephony.Sms.getDefaultSmsPackage(getActivity())
}
@Override
public void onResume() {
super.onResume();
String newDefSmsPkg = Telephony.Sms.getDefaultSmsPackage(getActivity());
if (!TextUtils.equals(mDefSmsPackage, newDefSmsPkg)) {
mDefSmsPackage = newDefSmsPkg;
//ON DEF SMS APP CAHNGE...
}
}