4

在我的應用程序中,我在ServiceonCreate()方法中註冊了BroadcastReceiver從BroadcastReceiver開始活動

registerReceiver(receiver, newIntentFilter(myAction)); 

現在我需要從每個時間onReceive(Context context, Intent intent)發生新註冊的BroadcastReceiver開始活動:

Intent i = new Intent(context,MyClass.class); 
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

的「上下文」,其已經被傳遞給我的BroadcastReceiverContext。那成功地工作並且開始了Activity。這是從Service開始在BraodcastReceiver內的Activity的正確和可靠的方法嗎?因爲有很多是爲獲取Context,像getApplicationContext()getApplication()的等

在我的情況下,使用已傳遞給我的BroadcastReceiver正確的方式Context

+0

'BroadcastReceiver'沒有'Context'。當調用'BroadcastReceiver.onReceive()'時它傳遞了一個上下文,但它沒有自己的一個,並且通過繼承不是'Context'。 – Prmths

+0

@Prmths是的,我想說同樣的話,對不起如果我不清楚! – Soheil

回答

3

可以使用「startActivity()」函數從服務啓動活動。

嘗試這樣:

public void startAct() { 
    Intent i = new Intent(); 
    i.setClass(this, MyActivity.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(i); 
} 

,並致電BroadcastReceiver裏面的功能。

android.app.Serviceandroid.app.Context的後裔,因此您可以直接使用startActivity方法。但是,由於您在任何活動之外開始此活動,因此您需要在意圖上設置FLAG_ACTIVITY_NEW_TASK標誌。

希望它有幫助。

+1

我只想達到從'Service'啓動一個'Activity'的可靠方法。我的代碼和你的代碼沒有區別,都使用'Service'的'Context'來提交'Intent'和'startActivity()',但是還有其他的方法,例如'getBaseContext()'等。我們的方式是否正確? – Soheil

+1

我這麼認爲,之前我用過很多次,一切正常,工作正常。 – Bardo91

2

答案是「是」。您可以將Context作爲參數傳遞給onReceive()以啓動一項活動。您也可以使用應用程序的上下文,您可以這樣得到:

context.getApplicationContext().startActivity(i); 

它沒有區別。兩者都可以工作。