Несмотря на то, что вы не можете показывать AlertDialog из приемников, поскольку для этого требуется ActivityContext.
У вас есть альтернативное решение для отображения действия, такого как AlertDialog, от Receiver. Это возможно.
Чтобы запустить действие как диалог, вы должны установить тему действия в манифесте как <activity android:theme="@android:style/Theme.Dialog" />
Стиль любого действия как диалоговое окно с предупреждением в Android
Чтобы запустить действие из приемника, используйте код, например
//Intent mIntent = new Intent();
//mIntent.setClassName("com.test", "com.test.YourActivity");
Intent mIntent = new Intent(context,YourActivity.class) //Same as above two lines
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mIntent);
И еще одна причина не использовать AlertDialog от получателя (даже если вам удалось показать AlertDialog)
Объект BroadcastReceiver действителен только на время вызова onReceive(Context, Intent). Как только ваш код возвращается из этой функции, система считает, что объект завершен и больше не активен.
Это имеет важные последствия для того, что вы можете сделать в реализации onReceive(Context, Intent): все, что требует асинхронной операции, недоступно, потому что вам нужно будет вернуться из функции для обработки асинхронной операции, но в этот момент BroadcastReceiver больше не активен, и, таким образом, система может завершить свой процесс до завершения асинхронной операции.
В частности, вы не можете отображать диалоговое окно или привязываться к службе из BroadcastReceiver. В первом случае вам следует использовать API NotificationManager. В последнем случае вы можете использовать Context.startService() для отправки команды службе. Подробнее…
Таким образом, лучший способ — «показать уведомление», а альтернативный — «использовать действие как предупреждение».
Удачного программирования :)
person
Pankaj Kumar
schedule
02.05.2013