2014-01-25 29 views
0

如何從服務類傳球意圖額外給FragmentActivity類?傳球意圖從服務到FragmentActivity

服務傳遞意向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

當您嘗試使用BroadcastReceiver時,您錯過了innvoke registerReceiver嗎? – Kamil