为什么startActivityForResult没有从AlarmClock.ACTION_SET_ALARM意图返回任何结果?

时间:2017-08-27 16:40:48

标签: android android-intent onactivityresult startactivityforresult

我尝试使用我的应用程序设置闹钟,并且我使用了here所述的闹钟公共意图。

这是我的代码:

public void createAlarm(String message, int hour, int minutes) {
        Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
                .putExtra(AlarmClock.EXTRA_MESSAGE, message)
                .putExtra(AlarmClock.EXTRA_HOUR, hour)
                .putExtra(AlarmClock.EXTRA_MINUTES, minutes)
                .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, SET_ALARM_REQUEST_CODE);
        }
}

此处onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SET_ALARM_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                if (data != null) {
                    Toast.makeText(getBaseContext(), "Alarm for " + data.getData().toString() + " has been set successfully!", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getBaseContext(), "data is null", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(getBaseContext(), "resultCode not OK", Toast.LENGTH_SHORT).show();
            }
        }
}

这里的问题是我收到了Toast条消息:resultCode not OK

那么,为什么startActivityForResult没有返回任何结果?

1 个答案:

答案 0 :(得分:3)

Intent行动是not documented to return anything。因此,实现不需要使用setResult(),因此您将获得默认响应。

startActivityForResult()替换为startActivity(),并从与onActivityResult()绑定的startActivityForResult()中删除结果处理代码。

顺便说一句,用getBaseContext()替换所有this来电。