Ok startet, wird angegeben id documentation:
Android Broadcastreceiver warum Popup
Sie können ein Popup-Dialog in Ihrer Implementierung von OnReceive() starten.
Dennoch ist dieser Code beatufilly arbeiten:
public class MainActivity extends AppCompatActivity {
final String ACTION = "myActionForBroadcast";
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyTag", "onReceive: context" + context.getPackageCodePath());
showDialog();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION);
registerReceiver(broadcastReceiver, filter);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d("MyTag", "Handler run: before send broadcast");
sendBroadcast(new Intent(ACTION));
}
}, 5_000);
}
private void showDialog() {
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Dialog: onClick()", Toast.LENGTH_SHORT).show();
}
});
Log.d("MyTag", "showDialog: before showing dialog");
builder.show();
Log.d("MyTag", "showDialog: before showing toast");
Toast.makeText(MainActivity.this, "showDialog: showing toast", Toast.LENGTH_SHORT).show();
}
}
Warum funktioniert es? Was fehlt mir in der Dokumentation? Danke.
Ja, das ist nicht sehr gut geschrieben. Ich glaube, was sie sagen wollen, ist, dass Sie nicht den 'Context' verwenden können, der an' onReceive() 'übergeben wurde, um einen' Dialog' zu erstellen und anzuzeigen. Ein "Dialog" benötigt einen "Aktivitäts" -Kontext ", den der" Kontext ", der in" onReceive() "übergeben wurde, nicht ist. In deinem Fall ist der 'BroadcastReceiver' eine innere Klasse von' MainActivity', und du verwendest 'MainActivity's' Context', um den 'Dialog' zu erstellen, also ist es gut. –
Ah, ok. Ich sah den kommenden Kontext BroadcastRestrictedContext, etwas in der Art. Aber Toast kann mit diesem Kontext gezeigt werden, oder? –
Ja, Sie können einen 'Toast' mit diesem' Kontext' anzeigen. –