Saya sedang membangun aplikasi android di mana saya harus memulai kegiatan dari latar belakang. Saya menggunakan ForegroundStarter yang memperluas Layanan untuk mencapai ini. Saya memiliki Adscreen.class aktivitas yang harus saya jalankan dari layanan Foreground saya. Aktivitas Adscreen.class berfungsi dengan baik (dimulai dari latar belakang) di semua versi Android kecuali Android 10.
ForeGroundStarter.class
public class ForeGroundStarter extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d("sK", "Inside Foreground");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("sK", "Inside Foreground onStartCommand");
Intent notificationIntent = new Intent(this, Adscreen.class);
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification =
null;
//Launching Foreground Services From API 26+
notificationIntent = new Intent(this, Adscreen.class);
pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String NOTIFICATION_CHANNEL_ID = "com.currency.usdtoinr";
String channelName = "My Background Service";
NotificationChannel chan = null;
chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
chan.setLightColor(Color.BLUE);
chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
assert manager != null;
manager.createNotificationChannel(chan);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notification = notificationBuilder.setOngoing(true)
.setSmallIcon(R.drawable.nicon)
.setContentTitle("")
.setPriority(NotificationManager.IMPORTANCE_MIN)
.setCategory(Notification.CATEGORY_SERVICE)
.build();
startForeground(2, notification);
Intent dialogIntent = new Intent(this, Adscreen.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
Log.d("sk", "After startforeground executed");
}
else //API 26 and lower
{
notificationIntent = new Intent(this, Adscreen.class);
pendingIntent =
PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification =
new Notification.Builder(this)
.setContentTitle("")
.setContentText("")
.setSmallIcon(R.drawable.nicon)
.setContentIntent(pendingIntent)
.setTicker("")
.build();
startForeground(2, notification);
Intent dialogIntent = new Intent(this, Adscreen.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
}
return super.onStartCommand(intent, flags, startId);
}
}
Saya membaca bahwa ada beberapa batasan untuk memulai aktivitas dari latar belakang Android 10. Kode ini sepertinya tidak berfungsi lagi. https://developer.android.com/guide/components/activities/background-starts
Intent dialogIntent = new Intent(this, Adscreen.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
Adakah solusi untuk memulai aktivitas dari latar belakang di Android 10?
android
foreground-service
SK707
sumber
sumber
Jawaban:
Tidak yakin apakah benar melakukannya dengan cara ini, tapi saya tidak punya cukup waktu (aplikasi hanya untuk penggunaan internal perusahaan).
Saya menggunakan izin:
dan kemudian setiap pengguna harus pergi ke pengaturan -> izin aplikasi dan kemudian centang kotak di pengaturan lanjutan untuk fungsi "tampilkan aplikasi lebih dari yang lain"
Maaf untuk bahasa Inggris saya atau bukan solusi yang tepat, tetapi berhasil, perbaikan terbaru yang bagus untuk saya.
Pada Pixel 4 akan terlihat seperti ini:
sumber
Seperti yang Anda sebutkan Pembatasan memulai aktivitas dari latar belakang
Dinyatakan bahwa
Mereka juga menyebutkan dalam catatan mereka itu.
Ini berarti jika Anda menggunakan layanan latar depan untuk memulai suatu Kegiatan, ia masih menganggap bahwa Aplikasi itu ada di latar belakang dan tidak akan meluncurkan Aktivitas aplikasi.
Solusi: Pertama, Anda tidak dapat memulai aplikasi jika berjalan di latar belakang dari Android 10 (API level 29) dan lebih tinggi. Mereka telah menyediakan cara baru untuk mengatasi perilaku ini yaitu bahwa alih-alih memanggil aplikasi, Anda dapat menampilkan pemberitahuan prioritas tinggi dengan maksud layar penuh .
Niat Layar Penuh berperilaku seperti jika layar perangkat Anda Tidak Aktif. Ini akan meluncurkan Aktivitas aplikasi Anda yang Anda inginkan. tetapi jika aplikasi Anda di latar belakang dan layar menyala maka itu hanya akan menampilkan pemberitahuan. Jika Anda mengklik notifikasi maka itu akan membuka aplikasi Anda.
Untuk informasi lebih lanjut tentang Pemberitahuan Prioritas Tinggi dan Niat Layar Penuh, Anda dapat memeriksanya di sini. Tampilkan pemberitahuan sensitif waktu
sumber
Anda harus memasukkan ke AndroidManifest.xml di bawah izin.
sumber