Мое приложение показывает пользовательский интерфейс на основе событий, полученных в различных BroacastReceiver. Так как мне нужно создать представление непосредственно из BroadcastReceiver, я использую такой код:
mWindowManager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_TOAST,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.OPAQUE);
TextView view = new TextView(context);
view.setText("You got Broadcast !");
mainView = view;
mWindowManager.addView(view, lp);
Log.d("MyApp"," View shown ")
Этот код правильно отображает TextView с текстом «Вы получили широковещательную рассылку», когда я получаю событие BroadcastReceiver, когда к моей основной деятельности приложения обращаются заранее. Означает, что мое приложение находится в памяти, и моя основная деятельность была показана.
Теперь, когда я перезагружаю телефон и мой BroadcastReceiver получает событие, все работает нормально. На самом деле я вижу оператор отладки «MyApp, представление показано» в logcat.
Но как ни странно, фактический вид с текстом «Вы получили трансляцию» не появляется на экране.
Теперь я снова запускаю свою основную деятельность и нажимаю кнопку «Домой». Теперь, если BroadcastReceiver снова получает событие, теперь он может правильно отображать текстовое представление с текстом «Вы получили трансляцию».
В настоящее время я не делаю ничего в основной деятельности, кроме показа сгенерированного по умолчанию макета xml. Это просто код:
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, " Main screen");
}
}
Мне не хватает инициализации экрана / графики, которая происходит при запуске основной активности?
Или мне нужно передать какой-либо дополнительный параметр WindowManager?