【问题标题】:Intent.FLAG_ACTIVITY_FORWARD_RESULT and PendingIntentIntent.FLAG_ACTIVITY_FORWARD_RESULT 和 PendingIntent
【发布时间】:2016-02-18 17:40:31
【问题描述】:

我想从具有 pendingIntent 的 AlarmManager 启动的 Activity 接收 Intent 实例。

我让 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);

但是我不明白当我在我的活动 B 中设置方法 setResult(...) 时,我在我的活动 A 中没有结果... 在我的活动 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 A 的 onActivityResult 方法中:

 @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 似乎不起作用...

【问题讨论】:

    标签: android android-intent android-pendingintent flags


    【解决方案1】:

    你不能这样使用Intent.FLAG_ACTIVITY_FORWARD_RESULT。由于ActivityBAlarmManager 启动,它将忽略FORWARD_RESULT 标志。仅当直接从另一个 Activity 启动 Activity 时,该标志才有效。

    【讨论】:

    • 感谢 Wasser 先生,现在很清楚,我修改了我的代码以不同的方式工作。但是这个 FLAG 是“null”,因为如果我想要我的 Activity B 的结果,我可以使用 startActivityForResult 和我的活动 A 中的“正常”意图对象(以及活动 B 中的 setResult)...
    • 是的,如果您使用startActivityForResult()ActivityA 启动ActivityB,则不需要FLAG_ACTIVITY_FORWARD_RESULT。如果您希望 ActivityB 然后启动 ActivityC 则需要该标志,然后应该将结果发送回 ActivityA
    • 谢谢你的帮助,我现在明白了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多