Окно предупреждений без перевода приложения на передний план

Я разрабатываю приложение для Android, в котором я добавил функцию напоминания. Но если приложение работает в фоновом режиме, скажем, если я нахожусь на главном экране и приложение работает в фоновом режиме, во время напоминания окно с предупреждением должно появиться на экране без перевода приложения на передний план. Возможно ли это?


person Pravy    schedule 27.05.2011    source источник


Ответы (4)


Диалоговое окно предупреждения создается с учетом контекста вашей активности, поэтому ваша активность (приложение) будет отображаться на переднем плане.

Почему бы вам не запустить уведомление в строке состояния для того же самого?

person mvrck    schedule 27.05.2011
comment
Есть такое же приложение для айфона? Большинство дизайнеров считают, что все, что можно сделать на iPhone, можно воспроизвести на Android, и наоборот. - person mvrck; 27.05.2011
comment
да точно..в айфоне есть - person Pravy; 27.05.2011

вы должны поместить код напоминания в службу, подобную этой

public class MyService extends Service {

private Timer timer = new Timer();
private static final long UPDATE_INTERVAL = 3600000;
public MediaPlayer mp;
public String ns =  Context.NOTIFICATION_SERVICE; 
public NotificationManager mNotificationManager;
public int icon = R.drawable.calendar;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    mp = MediaPlayer.create(this, R.raw.mail120);
    mNotificationManager  = (NotificationManager) getSystemService(ns);
    //Toast.makeText(this, "Service Created", Toast.LENGTH_LONG).show();

}

@Override
public void onDestroy() {
    super.onDestroy();
    timer.cancel();
    //Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

@Override
public void onStart(Intent intent, int startId) {

    super.onStart(intent, startId);
    _startService(this);


}

public void _startService(final Context context) {
    notified = new ArrayList<String>();
    notified_ergs = "";
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {

             //do some stuff
        }
    },0,UPDATE_INTERVAL);    
}
 }

и зарегистрируйте Broadcastreceiver:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyStartupIntentReceiver extends BroadcastReceiver{
 @Override
 public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent();
serviceIntent.setAction("[packagename].MyService");
context.startService(serviceIntent);

}
}

Ресивер сказал начать при загрузке (в манифесте Android

<receiver android:name=".MyStartupIntentReceiver">
        <intent-filter>
            <action
                android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </receiver>

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

person 2red13    schedule 27.05.2011
comment
нет проблем с кодом... Вы можете делать что хотите в run() void. - person 2red13; 27.05.2011
comment
Вы уверены, что приложение не выходит на передний план? - person Pravy; 27.05.2011
comment
да, потому что контекстом для toasmessage (или чего-либо) является служба, а не приложение. Этот код запускается даже в том случае, если приложение не загружено, поскольку служба зарегистрирована для запуска при запуске. - person 2red13; 27.05.2011

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

// add flag to show activity window if screen is locked.
        Window window = this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Вышеприведенный код должен быть после «super.onCreate(pSavedInstanceState);»

person Bhushan Kawadkar    schedule 27.05.2011
comment
Я сделал именно то, что вы сказали. Но моя проблема заключается в том, чтобы отображать окно предупреждения, не переводя приложение на передний план, если оно работает в фоновом режиме. - person Pravy; 27.05.2011

установите режим запуска активности в singleInstance в манифесте, все будет в порядке ~

person kikiChan    schedule 25.12.2013