我尝试使用我的应用程序设置闹钟,并且我使用了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
没有返回任何结果?
答案 0 :(得分:3)
Intent
行动是not documented to return anything。因此,实现不需要使用setResult()
,因此您将获得默认响应。
将startActivityForResult()
替换为startActivity()
,并从与onActivityResult()
绑定的startActivityForResult()
中删除结果处理代码。
顺便说一句,用getBaseContext()
替换所有this
来电。