2016-02-18 5 views
1

Я хочу получить экземпляр Intent из Activity, запущенного AlarmManager с помощью pendingIntent.Intent.FLAG_ACTIVITY_FORWARD_RESULT и PendingIntent

У меня есть активность запуск на активность B через alarmManager с pendingIntent так:

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

Но я не понимаю, когда я установить метод setResult (...) в моей деятельности B, у меня нет результата в моей деятельности 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(); 

      } 
     }); 

И в методе onActivityResult в деятельности 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 не работает ...

ответ

1

Вы не можете использовать Intent.FLAG_ACTIVITY_FORWARD_RESULT подобное. Поскольку ActivityB запускается AlarmManager, он игнорирует флаг FORWARD_RESULT. Этот флаг работает только в том случае, если Activity запускается непосредственно с другого Activity.

+0

Спасибо Mr. Wasser, теперь ясно, я изменил свой код, чтобы работать по-другому. Но этот FLAG «null», потому что, если я хочу получить результат из своей активности B, я могу использовать startActivityForResult с «нормальным» объектом намерения в моей деятельности A (и setResult в действии B) ... – Yass

+1

Да, если вы запустите 'ActivityB' из' ActivityA', используя 'startActivityForResult()', вам не понадобится 'FLAG_ACTIVITY_FORWARD_RESULT'. Вам понадобится этот флаг, если вы хотите, чтобы «ActivityB» запустил «ActivityC», который затем должен отправить результат обратно в «ActivityA». –

+1

Благодарим вас за помощь, теперь я понимаю лучше – Yass

 Смежные вопросы

  • Нет связанных вопросов^_^