Активность в стиле всплывающих окон Android, которая стоит поверх любых других приложений - PullRequest
0 голосов
/ 07 января 2011

То, что я хочу создать, - это приложение в стиле всплывающего окна.

У меня есть служба в фоновом режиме - что-то приходит в очередь, и я хочу, чтобы активность начала информировать пользователя - очень похоже нафункциональность приложения SMSPopup.

Итак, у меня есть код, по которому что-то поступает в очередь и вызывает мою активность.

Однако по какой-то причине активность всегда отображается поверх изначально запущенной активностипросто появляется на главном рабочем столе устройства Android.

Как пример:

У меня есть основное действие, которое отображается при запуске приложения

У меня естьслужба, которая проверяет очередь

У меня есть всплывающее действие.

Когда я запускаю основное действие, оно запускает службу - теперь я могу закрыть это.

Затем у меня что-то включеноочередь, и он создает всплывающее действие, которое запускает основное действие с всплывающим элементом поверх него: S Как мне остановить это и заставить его вести себя так, как я хочу ...

Класс всплывающего окна:




public class SMSPopup extends Activity implements OnClickListener{

 public static String msg;


 @Override
 public void onCreate(Bundle bundle){
  super.onCreate(bundle);
 // Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
  this.setContentView(R.layout.popup);
  TextView tv = (TextView)findViewById(R.id.txtLbl);
  Intent intent = getIntent();
  if (intent != null){
      Bundle bb = intent.getExtras();
      if (bb != null){
          msg = bb.getString("com.andy.tabletsms.message");
      }
  }

  if(msg == null){
   msg = "LOLOLOL";
  }
  tv.setText(msg);

  Button b = (Button)findViewById(R.id.closeBtn);
  b.setOnClickListener(this);
 }


 @Override
 public void onClick(View v) {
  this.finish();
 }
}




, и я вызываю активность от широковещательного приемника, который проверяет очередь каждые 30 секунд или около того:


  if(main.msgs.size()>0){

      Intent testActivityIntent = new Intent(context.getApplicationContext(), com.andy.tabletsms.work.SMSPopup.class);
    testActivityIntent.putExtra("com.andy.tabletsms.message", main.msgs.get(0));
    testActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(testActivityIntent);

      }

Расположение здесь: http://pastebin.com/F25u6wdM

1 Ответ

3 голосов
/ 07 января 2011

Это против практики проектирования, предложенной Android. Смотри http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Фоновая служба не должна никогда запускать активность самостоятельно для получения взаимодействия с пользователем.

Вы можете показать сообщение в тосте и / или уведомлении. Из уведомления вы можете начать новое намерение.

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