2014-01-25 3 views
0

Как вы передаете намерение дополнительно от класса обслуживания до класса FragmentActivity?Передача намерений от службы до FragmentActivity

Service Передача Intent в FragmentActivity

Intent intent = new Intent(getBaseContext(), Home.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
        | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      intent.putExtra("AlarmActivated", 1); 

     startActivity(intent); 

FragmentActivity Прием Намерение передается от службы

Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      extras = getIntent().getExtras(); 
      stopMovementAlarm = extras.getInt("AlarmActivated"); 
      Toast.makeText(getApplicationContext(), stopMovementAlarm, 
        Toast.LENGTH_LONG).show(); 
      cd.setText(""); 
      showMyDialog(); 
      volumeMax(); 
      alternatingScreen(); 

     } 

ответ

0

Я нашел мой вопрос, Передача значений между деятельностью становится немного более сложным, когда launchmode SingleTop брошен в код.

Мне нужно было поместить этот метод в мой onResume.

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 

     // set the string passed from the service to the original intent 
     setIntent(intent); 

    } 

Когда активность вновь запущена в то время как в верхней части стека деятельности, onNewIntent() вызывается на существующий экземпляре и возобновится деятельность таким образом мое Намерение может обновить.

1

В намерении вы не указали, деятельность запущенного, поэтому вы получаете сообщение об ошибке. Необходимо указать деятельность, как показано ниже

Intent intent = new Intent(context, Activity.class); 
+0

Спасибо, что помогло много, но мое намерение по-прежнему не передает значение для следующего действия. –

+0

Вы получаете какое-то исключение? Пожалуйста, уточните проблему. –

+0

Никаких исключений, это просто передача информации. –

0

Я думаю, что лучший способ будет использовать BroadcastReceiver передать намерение. Проверить этот пример http://android-coding.blogspot.in/2011/11/pass-data-from-service-to-activity.html

Eidt Попробуйте использовать getApplicationContext() вместо getBaseContext(). Если это не будет работать, попробовать что-то вроде этого:

//in your activity 

    private MyReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       int datapassed = bundle.getInt("DATAPASSED"); 

       Toast.makeText(getApplicationContext(), "Broadcast received", 
         Toast.LENGTH_LONG).show(); 
       cd.setText(""); 
       showMyDialog(); 
       volumeMax(); 
       alternatingScreen(); 
      } 
      } 
     } 
    }; 

    @Override 
    public void onResume(Bundle savedInstanceState) { 
     IntentFilter intentFilter = new IntentFilter(SOME_ACTION); 
     MyReceiver mReceiver = new MyReceiver(); 
     registerReceiver(mReceiver, intentFilter); 
    } 

//in your service somewhere 
     Intent intent = new Intent(getApplicationContext(), Home.class); 
     intent.putExtra("DATAPASSED", 1); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     sendBroadcast(intent); 

Я надеюсь, что будет решить :)

+0

Спасибо, я на самом деле пробовал это, я могу опубликовать свой код с приемником трансляции, если вам понравится. –

+0

Вы пропустили регистрацию innvokeReceiver, когда пытались использовать BroadcastReceiver? – Kamil

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