2017-09-07 4 views
1

Ich möchte meine MainActivity sagen, dass es automatisch von BroadcastReceiver gestartet wird, wenn das Boot abgeschlossen ist. Es scheint möglich zu sein, über putExtra zum MainActivity wie dies einige Werte an:Wie übergeben Wert von BroadcastReceiver zu Hauptaktivität

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); 

    } 
} 
} 

Aber wie kann ich diesen Wert in meinem MainActivity erhalten?

+0

'getIntent() getBooleanExtra (“ bootUpStart ", false);' ... – PPartisan

+1

** Bitte ** keine Aktivität in diesem Receiver starten. Es wird unzuverlässig sein, da Sie keine Ahnung haben, ob diese Übertragung vor oder nach dem Startbildschirm erfolgt. Wenn Sie beim Start des Geräts den Vordergrund übernehmen möchten, ** implementieren Sie Ihren eigenen Startbildschirm **. – CommonsWare

Antwort

0

Auf die BroadcastReceiver senden Sie die Absicht an die Activity.

Ich habe Ihren Schlüssel so geändert, dass er öffentlich ist, damit Sie ihn wiederverwenden können.

public static final String KEY_BOOTUP_START = "bootUpStart"; 

Auf der Activity Sie verarbeiten die Absicht.

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

Bitte, können Sie erklären, warum 'processExtraData();' zweimal aufgerufen wird, innerhalb 'onCreate (...)' und innerhalb 'onNewIntent (...)'? – user3137385

+0

Sicher Sache. 'onNewIntent()' ist als Einstiegspunkt für singleTop-Aktivitäten gedacht, die bereits irgendwo anders im Stack ausgeführt werden und daher 'onCreate() 'nicht erhalten. –

0

In Ihrer Tätigkeit können Sie die Absicht erhalten, die Ihre activiy begonnen hat wie:
in onCreateActivity:
Intent intent = getIntent();

als:.

Object value = intent.getExtra("key_bootUpStart"); 
Verwandte Themen