2015-04-26 55 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和棒棒糖上運行。讓我知道 –