WindowManager не может отобразить вид окна на экране, хотя его свойство видимости имеет значение true - PullRequest
1 голос
/ 22 января 2010

Мое приложение показывает пользовательский интерфейс на основе событий, полученных в различных 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?

Ответы [ 2 ]

0 голосов
/ 22 июля 2018

Добавьте правильное разрешение внутри файла манифеста. например оверлей sysytem, ​​окно предупреждения sysytem, ​​загрузка завершена, установить приоритет в теге получателя. Thnks

0 голосов
/ 02 декабря 2010

У меня тоже такая же проблема.

Я думаю, возможно, что экран, к которому вы хотите добавить текстовое представление, еще не находится на переднем плане. В целях тестирования, возможно, вы можете попробовать поспать пару секунд перед вызовом .addview ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...