2017-09-07 63 views
1

我想告訴我的MainActivity,它在啓動完成時由BroadcastReceiver自動啓動。這似乎是可能超過putExtra一些值發送到在MainActivity這樣的:如何將值從BroadcastReceiver傳遞到主要活動

public class StartAppAtBootReceiver extends BroadcastReceiver { 

private static final String key_bootUpStart = "bootUpStart"; 
private static boolean bootUpStart = true; 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 

     Intent activityIntent = new Intent(context, MainActivity.class); 
     activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     activityIntent.putExtra(key_bootUpStart, bootUpStart); 
     context.startActivity(activityIntent); 

    } 
} 
} 

但我怎麼能接受我的MainActivity內部的價值?

+0

'getIntent()getBooleanExtra(」 bootUpStart「,false);'...... – PPartisan

+1

**請**不要在這個接收器中開始一個活動。這將是不可靠的,因爲你不知道這個廣播是在主屏幕出現之前還是之後發生。如果您想在設備引導時接管前臺,**實現您自己的主屏幕**。 – CommonsWare

回答

0

BroadcastReceiver上,您將意向發送給Activity

我修改了您的密鑰以便公開,以便您可以重新使用它。

public static final String KEY_BOOTUP_START = "bootUpStart"; 

Activity您處理的意圖。

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    processExtraData(); 
} 

protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    setIntent(intent); 
    processExtraData() 
} 

private void processExtraData() 
{ 
    Intent intent = getIntent(); 
    // Use the data here. 
    boolean value = getIntent() 
     .getBooleanExtra(StartAppAtBootReceiver.KEY_BOOTUP_START, false); 
} 
+0

請問您能解釋爲什麼要在'onCreate(...)'和'onNewIntent(...)'內部調用'processExtraData();'兩次? – user3137385

+0

當然可以。 'onNewIntent()'意味着已經在堆棧中的其他地方運行的singleTop活動的入口點,因此不會得到'onCreate()'。 –

0

在你的活動,你可以得到已經開始的activiy的意圖,如:
onCreateActivity
Intent intent = getIntent();

比:

Object value = intent.getExtra("key_bootUpStart"); 
相關問題