2015-04-26 25 views
1

此代码在lollypop版本上正常工作,但是,当我在Kitkat上使用它时,当我从对话框中选择“是/否”选项时,它始终返回0。startActivityForResult在恢复短信时总是返回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(); 
      } 
    } 
} 

Activity.RESULT_OK值是-1和发送resultCode在onActivityResult始终为0时与奇巧使用。

回答

2

从Android documentation

onActivityResult当一个活动,你推出的退出,让您与您的resultCode为它 返回,并从它的任何附加数据启动它的requestCode调用。 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)); 
} 
+0

我没有得到你 – SANAT

+0

我的应用程序将改变为默认的短信应用,但结果代码不匹配toActivity.RESULT_OK所以,我的动作不应用 – SANAT

+1

执行请看更新的答案。我已经测试过,代码可以在KitKat和棒棒糖上运行。让我知道 –