StartActivityForResult always returns 0 when restoring SMS

This code works correctly on the lollypop version. But, when I use it in Kitkat, it always returns 0 when I select the Yes / No option from the dialog.

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();
            }
    }
}

The value of Activity.RESULT_OK is -1, and the resultCode in onActivityResult is always 0 when used with kitkat.

+1
source share
1 answer

From the Android documentation :

onActivityResult , , , , resultCode it . 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));
}
+2

All Articles