Intent.FLAG_ACTIVITY_FORWARD_RESULT 和 PendingIntent
Intent.FLAG_ACTIVITY_FORWARD_RESULT and PendingIntent
我想接收来自 Activity 的 Intent 实例,该实例由具有 pendingIntent 的 AlarmManager 启动。
我有 Activity A 通过带有 pendingIntent 的 alarmManager 启动 Activity B,如下所示:
PendingIntent pendingIntent = PendingIntent.getActivity(this, position, intentListAlarmActivityToWakeUpActivity, 0);
Log.i("position", position +"");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hourAlarm);
calendar.set(Calendar.MINUTE, minutesAlarm);
Log.i("timeInMillis", calendar.getTimeInMillis() + "");
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
有这样的意图:
intentListAlarmActivityToWakeUpActivity = new Intent(ListAlarmActivity.this, WakeUpActivity.class);
intentListAlarmActivityToWakeUpActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
但是我不明白当我在 Activity B 中设置方法 setResult(...) 时,我在 Activity A 中没有结果...
在我的 Activity B:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wake_up);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
);
mStopButton = (Button) findViewById(R.id.stop_button);
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int stopAlarm = 1;
Intent intentResult = new Intent();
intentResult.putExtra("stopAlarm", stopAlarm);
setResult(RESULT_OK, intentResult);
finish();
}
});
并在Activity方法中得到Activity A :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Alarm alarm = (Alarm) intent.getSerializableExtra(AlarmAdapter.ALARM_INSTANCE);
int position = intent.getIntExtra(AlarmAdapter.ITEM_POSITION_ADAPTER, 0);
setAlarm(alarm.getHourOfAlarm(), alarm.getMinutesOfAlarm(), position);
mListOfAlarm.get(position).setData(alarm);
mAlarmAdapter.notifyDataSetChanged();
}
else if(requestCode == REQUEST_CODE_WAKE_UP_ACTIVITY && resultCode == RESULT_OK) {
int stop = intent.getIntExtra("stopAlarm", -1);
Log.i("stopAlarm", stop +"");
}
}
似乎标志 Intent.FLAG_ACTIVITY_FORWARD_RESULT 不起作用...
你不能那样使用 Intent.FLAG_ACTIVITY_FORWARD_RESULT
。由于 ActivityB
由 AlarmManager
启动,它将忽略 FORWARD_RESULT 标志。该标志仅在 Activity
直接从另一个 Activity
.
启动时才有效
我想接收来自 Activity 的 Intent 实例,该实例由具有 pendingIntent 的 AlarmManager 启动。
我有 Activity A 通过带有 pendingIntent 的 alarmManager 启动 Activity B,如下所示:
PendingIntent pendingIntent = PendingIntent.getActivity(this, position, intentListAlarmActivityToWakeUpActivity, 0);
Log.i("position", position +"");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, hourAlarm);
calendar.set(Calendar.MINUTE, minutesAlarm);
Log.i("timeInMillis", calendar.getTimeInMillis() + "");
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
有这样的意图:
intentListAlarmActivityToWakeUpActivity = new Intent(ListAlarmActivity.this, WakeUpActivity.class);
intentListAlarmActivityToWakeUpActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_FORWARD_RESULT);
但是我不明白当我在 Activity B 中设置方法 setResult(...) 时,我在 Activity A 中没有结果... 在我的 Activity B:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wake_up);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
);
mStopButton = (Button) findViewById(R.id.stop_button);
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int stopAlarm = 1;
Intent intentResult = new Intent();
intentResult.putExtra("stopAlarm", stopAlarm);
setResult(RESULT_OK, intentResult);
finish();
}
});
并在Activity方法中得到Activity A :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
Alarm alarm = (Alarm) intent.getSerializableExtra(AlarmAdapter.ALARM_INSTANCE);
int position = intent.getIntExtra(AlarmAdapter.ITEM_POSITION_ADAPTER, 0);
setAlarm(alarm.getHourOfAlarm(), alarm.getMinutesOfAlarm(), position);
mListOfAlarm.get(position).setData(alarm);
mAlarmAdapter.notifyDataSetChanged();
}
else if(requestCode == REQUEST_CODE_WAKE_UP_ACTIVITY && resultCode == RESULT_OK) {
int stop = intent.getIntExtra("stopAlarm", -1);
Log.i("stopAlarm", stop +"");
}
}
似乎标志 Intent.FLAG_ACTIVITY_FORWARD_RESULT 不起作用...
你不能那样使用 Intent.FLAG_ACTIVITY_FORWARD_RESULT
。由于 ActivityB
由 AlarmManager
启动,它将忽略 FORWARD_RESULT 标志。该标志仅在 Activity
直接从另一个 Activity
.