Как правило, мы отображаем диалоги только из действий, поэтому контекст ShieldSquare.applicationContext
не может показать AlertDialog
.
Существует два метода, которые могут удовлетворить ваши потребности:
Первый , используйте специальное разрешение android.permission.SYSTEM_ALERT_WINDOW
.
Перед вашим alertDialog.show();
добавьте:
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
И добавить разрешение ниже к AndroidManifest.xml
.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Тогда вы можете использовать ShieldSquare.applicationContext
для построителя диалогов.
Второй , вы можете обновить ShieldSquare.applicationContext
до самого последнего действия, тогда ShieldSquare.applicationContext
всегда будет контекстом действия:
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShieldSquare.applicationContext = this;
}
}
И я нашел несколько подходов к использованию BroadcastReceiver
для отображения диалогов, вы также можете посмотреть, посмотреть ответ SO и это сообщение в блоге .