Я разрабатываю приложение для Android, в котором я добавил функцию напоминания. Но если приложение работает в фоновом режиме, скажем, если я нахожусь на главном экране и приложение работает в фоновом режиме, во время напоминания окно с предупреждением должно появиться на экране без перевода приложения на передний план. Возможно ли это?
Окно предупреждений без перевода приложения на передний план
Ответы (4)
Диалоговое окно предупреждения создается с учетом контекста вашей активности, поэтому ваша активность (приложение) будет отображаться на переднем плане.
Почему бы вам не запустить уведомление в строке состояния для того же самого?
вы должны поместить код напоминания в службу, подобную этой
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>
И теперь вы можете воспроизводить звук, отправлять сообщения на панель уведомлений или поднимать некоторые сообщения, не запуская приложение.
Используйте службу для обработки напоминания и запуска окна предупреждения о сообщении с напоминанием, которое будет в основном действием или диалоговым окном. Но для заблокированного экрана он может отображать или не отображать предупреждение, для этого вы должны использовать следующий код в методе создания действия.
// 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);»
установите режим запуска активности в singleInstance в манифесте, все будет в порядке ~