Android - 从更改默认SMS应用程序对话框中获取结果

时间:2014-11-19 05:56:10

标签: java android sms android-4.4-kitkat

我正在努力在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);
}

enter image description here

上面的代码显示了这个对话框,但我无法从用户点击Yes或No中获取此活动/对话框的结果,因为我想添加监听器或获取任何代表用户点击这些按钮的代码。 感谢。

2 个答案:

答案 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...

    }
}