2017-09-07 37 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"); 
相关问题