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

问题描述:

我想用我的应用程序设置闹钟和我使用闹钟共同意图为描述here为什么startActivityForResult不会从AlarmClock.ACTION_SET_ALARM意图返回任何结果?

这里是我的代码:

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(); 
      } 
     } 
} 

这里的问题是,我得到这个消息ToastresultCode not OK

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

+0

因为很可能你的活动将在闹钟之前死亡。这是很长时间的任务(例如15小时)。将结果返回到开始活动是我认为不好的设计。这就是为什么它不会返回任何结果。 –

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

替换您startActivityForResult()startActivity(),并从onActivityResult()绑到startActivityForResult()删除您的结果处理代码。

BTW,更换所有getBaseContext()电话与this

+0

那么如何确认报警设置成功,以便我可以向用户显示一些文字? –

+0

@HammadNasir:你不行。用户是否选择设置闹钟位于用户和处理您的“ACTION_SET_ALARM”操作的应用程序之间。 – CommonsWare

+0

那么,如果我想向用户显示一些确认文本,我该怎么办? –