恢复短信时,startActivityForResult始终返回0

时间:2015-04-26 04:07:33

标签: android android-intent

此代码在lollypop版本上正常工作,但是,当我在Kitkat上使用它时,当我选择"是/否"时,它总是返回0。对话框中的选项。

btnSMSRestore.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
                if (currentapiVersion >= android.os.Build.VERSION_CODES.KITKAT){
                    defaultSmsApp = Telephony.Sms.getDefaultSmsPackage(SMSActivity.this);
                    if (!getPackageName().equals(defaultSmsApp))
                    {
                        Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                        intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
                        //startActivity(intent);
                        startActivityForResult(intent, DEF_SMS_REQ);
                    }
                }
                else
                {
                    new RestoreSMS().execute();
                }
    });
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    switch (requestCode)
    {
        case DEF_SMS_REQ:           
            if(resultCode == Activity.RESULT_OK)
            {
                new RestoreSMS().execute();
            }
    }
}

当与kitkat一起使用时,Activity.RESULT_OK值为-1,onActivityResult中的resultCode始终为0。

1 个答案:

答案 0 :(得分:2)

来自Android documentation

  

onActivityResult 当你启动的某个活动退出时调用,为你提供你启动它的requestCode,resultCode it   返回,以及来自它的任何其他数据。 resultCode将是   RESULT_CANCELED如果活动明确返回,则没有   返回任何结果,或在其运行期间崩溃。

RESULT_CANCELED值为0,可能在KitKat上未设置结果值,并返回默认值。

作为KitKat的解决方法,您可以尝试在触发onActivityResult时检查您的应用是否是默认应用。试试这段代码:

btnSMSRestore.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            if (!isDefaultSmsApp(SMSActivity.this)) {
            {
                Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
                intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName());
                startActivityForResult(intent, DEF_SMS_REQ);
            }
        } else {
            new RestoreSMS().execute();
        }
});

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case DEF_SMS_REQ:
            if (Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.KITKAT && isDefaultSmsApp(this) ||
                    Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && resultCode == Activity.RESULT_OK) {
                new RestoreSMS().execute();
            }
            break;
    }
}

@TargetApi(Build.VERSION_CODES.KITKAT)
public static boolean isDefaultSmsApp(Context context) {
    return context.getPackageName().equals(Telephony.Sms.getDefaultSmsPackage(context));
}