此代码在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。
答案 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));
}