Bagaimana cara mengatur alarm agar dijadwalkan pada waktu yang tepat setelah semua pembatasan terbaru pada Android?

27

Catatan: Saya mencoba berbagai solusi yang ditulis di sini di StackOverflow (contoh di sini ). Tolong jangan tutup ini tanpa memeriksa apakah solusi Anda dari apa yang Anda temukan bekerja menggunakan tes yang saya tulis di bawah ini.

Latar Belakang

Ada persyaratan pada aplikasi, bahwa pengguna menetapkan pengingat yang dijadwalkan pada waktu tertentu, jadi ketika aplikasi dipicu pada waktu ini, ia melakukan sesuatu yang kecil di latar belakang (hanya beberapa operasi permintaan DB), dan menunjukkan pemberitahuan sederhana, untuk memberi tahu tentang pengingat.

Di masa lalu, saya menggunakan kode sederhana untuk mengatur sesuatu agar dijadwalkan pada waktu yang relatif spesifik:

            val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
            val pendingIntent = PendingIntent.getBroadcast(context, requestId, Intent(context, AlarmReceiver::class.java), PendingIntent.FLAG_UPDATE_CURRENT)
            when {
                VERSION.SDK_INT >= VERSION_CODES.KITKAT -> alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)
                else -> alarmManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)
            }
class AlarmReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        Log.d("AppLog", "AlarmReceiver onReceive")
        //do something in the real app
    }
}

Pemakaian:

            val timeToTrigger = System.currentTimeMillis() + java.util.concurrent.TimeUnit.MINUTES.toMillis(1)
            setAlarm(this, timeToTrigger, 1)

Masalah

Saya sekarang telah menguji kode ini pada emulator pada versi Android baru dan pada Pixel 4 dengan Android 10, dan tampaknya tidak memicu, atau mungkin memicu setelah waktu yang sangat lama sejak apa yang saya berikan. Saya menyadari perilaku buruk yang ditambahkan beberapa OEM untuk menghapus aplikasi dari tugas-tugas terbaru, tetapi yang satu ini ada pada kedua emulator dan perangkat Pixel 4 (persediaan).

Saya sudah membaca dokumen tentang mengatur alarm, bahwa itu dibatasi untuk aplikasi sehingga tidak akan terlalu sering terjadi, tetapi ini tidak menjelaskan cara mengatur alarm pada waktu tertentu, dan itu tidak menjelaskan kenapa aplikasi Google Clock berhasil melakukannya.

Tidak hanya itu, tetapi menurut apa yang saya pahami, dikatakan bahwa pembatasan harus diterapkan terutama untuk kondisi daya perangkat yang rendah, tetapi dalam kasus saya, saya tidak memiliki status ini, baik pada perangkat maupun pada emulator. Saya sudah mengatur alarm untuk dipicu dalam sekitar satu menit dari sekarang.

Melihat bahwa banyak aplikasi jam alarm tidak berfungsi lagi seperti biasanya, saya pikir ada sesuatu yang hilang pada dokumen. Contoh aplikasi semacam itu adalah aplikasi Tepat Waktu yang populer yang dibeli oleh Google tetapi tidak pernah mendapat pembaruan baru untuk menangani pembatasan baru, dan sekarang pengguna menginginkannya kembali. . Namun, beberapa aplikasi populer berfungsi dengan baik, seperti yang ini .

Apa yang saya coba

Untuk menguji apakah memang alarmnya bekerja, saya melakukan tes-tes ini ketika mencoba memicu alarm dalam satu menit dari sekarang, setelah menginstal aplikasi untuk pertama kalinya, semuanya saat perangkat terhubung ke PC (untuk melihat log):

  1. Uji ketika aplikasi di latar depan, terlihat oleh pengguna. - butuh 1-2 menit.
  2. Tes ketika aplikasi dikirim ke latar belakang (menggunakan tombol home, misalnya) - membutuhkan waktu sekitar 1 menit
  3. Uji kapan tugas aplikasi dihapus dari tugas terbaru. - Saya menunggu lebih dari 20 menit dan tidak melihat alarm dipicu, menulis ke log.
  4. Seperti # 3, tetapi juga matikan layar. Mungkin akan lebih buruk ...

Saya mencoba menggunakan hal-hal selanjutnya, semua tidak berfungsi:

  1. alarmManager.setAlarmClock(AlarmManager.AlarmClockInfo(timeToTrigger, pendingIntent), pendingIntent)

  2. alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)

  3. AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)

  4. kombinasi salah satu di atas, dengan:

    if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) alarmManager.setWindow(AlarmManager.RTC_WAKEUP, 0, 60 * 1000L, pendingIntent)

  5. Mencoba menggunakan layanan alih-alih BroadcastReceiver. Juga mencoba proses yang berbeda.

  6. Mencoba membuat aplikasi diabaikan dari optimasi baterai (tidak membantu), tetapi karena aplikasi lain tidak membutuhkannya, saya juga tidak boleh menggunakannya.

  7. Sudah mencoba menggunakan ini:

            if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP)
                alarmManager.setAlarmClock(AlarmManager.AlarmClockInfo(timeToTrigger, pendingIntent), pendingIntent)
            AlarmManagerCompat.setExactAndAllowWhileIdle(alarmManager, AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)
  1. Sudah mencoba sebuah layanan yang akan memiliki pemicu onTaskRemoved , untuk menjadwalkan ulang alarm di sana, tetapi ini juga tidak membantu (layanannya bekerja dengan baik).

Adapun aplikasi Jam Google, saya tidak melihat sesuatu yang istimewa tentang hal itu kecuali bahwa itu menunjukkan pemberitahuan sebelum dipicu, dan saya juga tidak melihatnya di bagian "tidak dioptimalkan" pada layar pengaturan pengoptimalan baterai.

Melihat bahwa ini sepertinya bug, saya melaporkannya di sini , termasuk proyek sampel dan video untuk menunjukkan masalah tersebut.

Saya telah memeriksa beberapa versi emulator, dan tampaknya perilaku ini dimulai dari API 27 (Android 8.1 - Oreo). Melihat dokumen , saya tidak melihat AlarmManager disebutkan, tetapi sebaliknya, itu ditulis tentang berbagai latar belakang pekerjaan.

Pertanyaan-pertanyaan

  1. Bagaimana kita mengatur sesuatu untuk dipicu pada waktu yang relatif tepat saat ini?

  2. Kenapa solusi di atas tidak berfungsi lagi? Apakah saya kehilangan sesuatu? Izin? Mungkin saya seharusnya menggunakan Pekerja sebagai gantinya? Tapi bukankah itu berarti itu mungkin tidak memicu waktu sama sekali?

  3. Bagaimana aplikasi "Jam" Google mengatasi semua ini, dan tetap memicu pada waktu yang tepat, selalu, bahkan jika dipicu hanya beberapa menit yang lalu? Apakah hanya karena itu aplikasi sistem? Bagaimana jika itu diinstal sebagai aplikasi pengguna, pada perangkat yang tidak memilikinya built-in?

Jika Anda mengatakan itu karena itu adalah aplikasi sistem, saya telah menemukan aplikasi lain yang dapat memicu alarm dua kali dalam 2 menit, di sini , meskipun saya pikir itu kadang-kadang menggunakan layanan latar depan.

EDIT: membuat repositori Github kecil untuk mencoba ide, di sini .


EDIT: akhirnya menemukan sampel yang bersumber terbuka dan tidak memiliki masalah ini. Sayangnya itu sangat kompleks dan saya masih mencoba mencari tahu apa yang membuatnya sangat berbeda (dan apa kode minimal yang harus saya tambahkan ke POC saya) yang memungkinkan alarmnya tetap dijadwalkan setelah menghapus aplikasi dari tugas-tugas terbaru

pengembang android
sumber
sudah lama saya bekerja pada layanan (Saya bahkan tidak pro developer untuk menyarankan), tapi saya dapat menyarankan Anda menghindari alarmManager untuk kasus-kasus seperti mengatur alarm di bawah 5 menit, karena pembatasan android setelah layanan waktu berjalan di backend dipanggil setelah setiap 5 menit atau lebih besar tidak kurang dari 5 menit. Sebaliknya, saya menggunakan Handler. Dan untuk menjalankan layanan saya berlanjut di latar belakang saya merujuk [ github.com/fabcira/neverEndingAndroidService]
Blu
Jadi apa saja batasan yang pasti? Berapa waktu minimal yang dijamin bahwa pemicu akan bekerja dalam waktu pemberian yang relatif tepat?
pengembang android
Saya tidak dapat mengingat batasan yang pasti, tetapi ketika saya sedang mengerjakannya, saya mencari Google selama berhari-hari untuk mengatasi layanan latar belakang yang terbunuh secara otomatis. Dan dari pengamatan pribadi saya melihat ada masalah pada Samsung, Xiaomi, dll, Anda tidak dapat memanggil alarmManger di antara interval 5 menit, saya memiliki layanan unggah data yang diimplementasikan menggunakan alarmManger yang dipicu setiap 1 menit, tetapi mengecewakan klien kami yang mengeluh layanan tidak berjalan sama sekali. Untuk emulator itu bekerja dengan baik.
Blu
Saya tahu Anda tidak dapat memulai aktivitas dari latar belakang di Android Q, tetapi sepertinya ini bukan kasus Anda.
marcinj
@ greeble31 Saya mencoba sekarang. Solusi mana yang Anda lihat berfungsi? Untuk beberapa alasan saya masih belum berhasil. Saya mengatur alarm, saya menghapus aplikasi dari tugas-tugas terbaru, dan saya tidak melihat alarm dipicu, meskipun layar dihidupkan dan perangkat terhubung ke pengisi daya. Ini terjadi pada perangkat nyata (Pixel 4 dengan Android 10) dan pada emulator (API 27 misalnya). Apakah itu berhasil untuk Anda? Bisakah Anda membagikan kode lengkapnya? Mungkin di Github?
pengembang android

Jawaban:

4

Kami tidak punya apa-apa untuk dilakukan.

Setelah aplikasi Anda tidak masuk daftar putih itu akan selalu terbunuh begitu dihapus dari aplikasi terbaru.

Karena Original Equipment Manufacturer (OMEs) terus-menerus melanggar kepatuhan Android .

Jadi, Jika aplikasi Anda tidak masuk daftar putih dari perangkat Memproduksi, aplikasi itu tidak akan memadamkan alarm latar belakang apa pun - jika aplikasi Anda dihapus dari aplikasi terbaru.

Anda dapat menemukan daftar perangkat dengan perilaku itu di sini JUGA Anda mungkin menemukan solusi samping, Namun, itu tidak akan berfungsi dengan baik.

Ibrahim Ali
sumber
Saya sangat menyadari masalah ini OEM Cina. Tetapi ketika saya menulis, itu terjadi bahkan pada emulator dan perangkat Pixel 4. Bukan OEM Cina yang membuatnya seperti itu. Silakan periksa emulator dan / atau perangkat Pixel. Masalahnya ada di sana juga. Atur alarm, hapus aplikasi dari tugas-tugas terbaru, dan pastikan alarm tidak terpicu. Saya melihat ini sebagai bug, dan dilaporkan di sini (termasuk video dan proyek sampel jika Anda ingin mencoba): issuetracker.google.com/issues/149556385. Saya telah memperbarui pertanyaan saya untuk memperjelasnya. Pertanyaannya, mengapa beberapa aplikasi berhasil.
pengembang android
@androiddeveloper Saya percaya ini harus bekerja pada Emulator .. Emulator mana yang Anda miliki?
Ibrahim Ali
Saya juga percaya, sampai saya mencobanya. Coba saja di API 29 misalnya, apa yang ditawarkan Android Studio. Saya yakin hal yang sama akan terjadi pada versi yang sedikit lebih tua juga.
pengembang android
4

Menemukan solusi aneh (contoh di sini ) yang tampaknya berfungsi untuk semua versi, termasuk bahkan Android R:

  1. Apakah izin izin SAW dinyatakan dalam manifes:
      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

Di Android R Anda juga harus memberikannya. Sebelumnya, sepertinya tidak perlu dikabulkan, hanya dideklarasikan. Tidak yakin mengapa ini berubah pada R, tetapi saya dapat mengatakan bahwa SAW dapat diminta sebagai solusi yang memungkinkan untuk memulai sesuatu di latar belakang, seperti yang ditulis di sini untuk Android 10.

  1. Memiliki layanan yang akan mendeteksi kapan tugas dihapus, dan ketika itu terjadi, buka Kegiatan palsu yang harus ditutup sendiri:
class OnTaskRemovedDetectorService : Service() {
    override fun onBind(intent: Intent?) = null

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) = START_STICKY

    override fun onTaskRemoved(rootIntent: Intent?) {
        super.onTaskRemoved(rootIntent)
        Log.e("AppLog", "onTaskRemoved")
        applicationContext.startActivity(Intent(this, FakeActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
        stopSelf()
    }

}

FakeActivity.kt

class FakeActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("AppLog", "FakeActivity")
        finish()
    }
}

Anda juga dapat membuat Kegiatan ini hampir tidak terlihat oleh pengguna menggunakan tema ini:

    <style name="AppTheme.Translucent" parent="@style/Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

Sayangnya, ini adalah solusi yang aneh. Saya berharap dapat menemukan solusi yang lebih baik untuk ini.

Pembatasan ini berbicara tentang memulai Activity, jadi ide saya saat ini adalah bahwa mungkin jika saya memulai layanan foreground untuk sepersekian detik, itu juga akan membantu, dan untuk ini saya bahkan tidak memerlukan izin SAW.

EDIT: OK saya mencoba dengan layanan latar depan (contoh di sini ), dan tidak berhasil. Tidak tahu mengapa suatu Kegiatan berfungsi tetapi bukan layanan. Saya bahkan mencoba untuk menjadwalkan ulang alarm di sana dan mencoba untuk membiarkan layanan tetap sebentar, bahkan setelah menjadwalkan ulang. Juga mencoba layanan normal tetapi tentu saja menutup segera, karena tugas itu dihapus, dan itu tidak berfungsi sama sekali (bahkan jika saya membuat utas untuk berjalan di latar belakang).

Solusi lain yang mungkin saya tidak coba adalah memiliki layanan latar depan selamanya, atau setidaknya sampai tugas dihapus, tapi ini agak aneh dan saya tidak melihat aplikasi yang saya sebutkan menggunakannya.

EDIT: mencoba menjalankan layanan latar depan sebelum menghapus tugas aplikasi, dan untuk beberapa saat setelahnya, dan alarm tetap bekerja. Juga mencoba agar layanan ini menjadi orang yang bertanggung jawab atas acara yang dihapus tugas, dan segera menutup sendiri ketika terjadi, dan masih berfungsi (contoh di sini ). Keuntungan dari solusi ini adalah bahwa Anda tidak harus memiliki izin SAW sama sekali. Kerugiannya adalah Anda memiliki layanan dengan notifikasi sementara aplikasi sudah terlihat oleh pengguna. Saya ingin tahu apakah mungkin untuk menyembunyikan pemberitahuan saat aplikasi sudah berada di latar depan melalui Aktivitas.


EDIT: Sepertinya ini bug di Android Studio (dilaporkan di sini , termasuk video yang membandingkan versi). Saat Anda meluncurkan aplikasi dari versi bermasalah yang saya coba, ini dapat menyebabkan alarm dihapus.

Jika Anda meluncurkan aplikasi dari peluncur, itu berfungsi dengan baik.

Ini adalah kode saat ini untuk mengatur alarm:

        val timeToTrigger = System.currentTimeMillis() + 10 * 1000
        val pendingShowList = PendingIntent.getActivity(this, 1, Intent(this, SomeActivity::class.java), PendingIntent.FLAG_UPDATE_CURRENT)
        val pendingIntent = PendingIntent.getBroadcast(this, 1, Intent(this, AlarmReceiver::class.java), PendingIntent.FLAG_UPDATE_CURRENT)
        manager.setAlarmClock(AlarmManager.AlarmClockInfo(timeToTrigger, pendingShowList), pendingIntent)

Saya bahkan tidak harus menggunakan "pendingShowList". Menggunakan null juga ok.

pengembang android
sumber
Saya hanya ingin memulai aktivitas di menerima () di AndroidQ. Apakah ada solusi untuk itu tanpa SYSTEM_ALERT_WINDOWizin?
doctorram
2
Mengapa Google selalu membuat kehidupan pengembang Android menjadi neraka hidup daripada hal-hal sederhana ?!
doctorram
@ doktorram Ya, ini tertulis di dokumen tentang berbagai pengecualian: developer.android.com/guide/components/activities/… . Saya baru saja memilih SYSTEM_ALERT_WINDOW karena ini yang paling mudah untuk mengujinya.
Pengembang android
Dari hasil edit terakhir Anda, apakah maksud Anda bahwa sekarang kami tidak perlu menggunakan solusi yang Anda sebutkan untuk mempertahankan alarm setelah menghapus aplikasi dari daftar terbaru ??
user3410835
Saya ingin menjalankan sepotong kode setiap hari antara jam 6 pagi dan 7 pagi di latar belakang bahkan jika aplikasi dihapus dari daftar terbaru. Saya harus menggunakan WorkManager atau AlarmManager ?? Mencoba kode berikut untuk usecase saya dan tidak berhasil. Apa masalah dengan kode di bawah ini? calendar.setTimeInMillis (System.currentTimeMillis ()); calendar.set (Calendar.HOUR_OF_DAY, 6); alarmManager.setInexactRepeating (AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis (), AlarmManager.INTERVAL_DAY, pendingIntent);
user3410835
1
  1. Pastikan maksud yang Anda siarankan eksplisit dan memiliki Intent.FLAG_RECEIVER_FOREGROUNDbendera.

https://developer.android.com/about/versions/oreo/background#broadcasts

Intent intent = new Intent(context, Receiver.class);
intent.setAction(action);
...
intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);

PendingIntent operation = PendingIntent.getBroadcast(context, 0, intent, flags);
  1. Gunakan setExactAndAllowWhileIdle()saat menargetkan API 23+.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, operation);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, operation);
} else {
    alarmManager.set(AlarmManager.RTC_WAKEUP, time, operation);
}
  1. Mulai alarm Anda sebagai Layanan Foreground:

https://developer.android.com/about/versions/oreo/background#migration

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    context.startForegroundService(intent);
} else {
    context.startService(intent);
}
  1. Dan jangan lupa izin:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
Maksim Ivanov
sumber
Mengapa itu penting tentang layanan, jika BroadcastReceiver itu sendiri tidak mendapatkan Intent sama sekali (atau mendekati waktu)? Itu langkah pertama ... Juga, bukankah AlarmManagerCompat sudah menawarkan kode yang sama ini? Sudahkah Anda mencoba ini menggunakan tes yang saya tulis, termasuk menghapus aplikasi dari tugas terbaru? Bisakah Anda menunjukkan seluruh kode? Mungkin berbagi di Github?
Pengembang Android
@androiddeveloper memperbarui jawabannya.
Maksim Ivanov
Sepertinya masih tidak berhasil. Berikut ini contoh proyek: ufile.io/6qrsor7o . Silakan coba di Android 10 (emulator juga ok), atur alarm, dan hapus aplikasi dari tugas terbaru. Jika Anda tidak menghapus dari tugas-tugas terbaru, itu berfungsi dengan baik dan dipicu setelah 10 detik.
Pengembang Android
Saya juga memperbarui pertanyaan untuk memiliki tautan ke laporan bug yang mencakup proyek sampel dan video, karena saya pikir ini adalah bug karena saya tidak melihat alasan lain mengapa hal ini terjadi.
pengembang android
0

Saya tahu ini tidak efisien tetapi mungkin lebih konsisten dengan akurasi 60 detik.

https://developer.android.com/reference/android/content/Intent#ACTION_TIME_TICK

jika penerima siaran ini digunakan di dalam layanan latar depan, Anda dapat memeriksa waktu setiap menit dan membuat keputusan untuk mengambil tindakan.

Keras
sumber
Jika saya memiliki layanan latar depan, mengapa saya membutuhkan ini? Saya hanya bisa menggunakan Handler.postDelayed atau solusi serupa lainnya jika saya mau ...
android developer
0

Saya pikir Anda dapat meminta pengguna untuk mengatur izin sehingga menonaktifkan mode hemat energi, dan memperingatkan pengguna bahwa jika dia tidak menggunakannya, waktu yang tepat tidak akan tercapai.

Berikut kode untuk memintanya:

PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(POWER_SERVICE);
            String packageName = "your Package name";
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                Intent i = new Intent();
                if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
                    i.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                    i.setData(Uri.parse("package:" + packageName));
                    startActivity(i);
pengguna2638180
sumber
Sudah mencoba ini karena saya perhatikan bahwa tidak ada aplikasi lain yang melakukannya dan ingin tahu apakah itu dapat membantu. Tidak bekerja Pertanyaan diperbarui.
pengembang android
0

Saya adalah penulis proyek open source yang telah Anda sebutkan dalam pertanyaan Anda ( jam alarm sederhana) .

Saya terkejut bahwa menggunakan AlarmManager.setAlarmClock tidak berfungsi untuk Anda, karena aplikasi saya melakukan hal itu. Kode tersebut ada dalam file AlarmSetter.kt. Berikut ini cuplikannya:

  val pendingAlarm = Intent(ACTION_FIRED)
                .apply {
                    setClass(mContext, AlarmsReceiver::class.java)
                    putExtra(EXTRA_ID, id)
                    putExtra(EXTRA_TYPE, typeName)
                }
                .let { PendingIntent.getBroadcast(mContext, pendingAlarmRequestCode, it, PendingIntent.FLAG_UPDATE_CURRENT) }

            val pendingShowList = PendingIntent.getActivity(
                    mContext,
                    100500,
                    Intent(mContext, AlarmsListActivity::class.java),
                    PendingIntent.FLAG_UPDATE_CURRENT
            )

            am.setAlarmClock(AlarmManager.AlarmClockInfo(calendar.timeInMillis, pendingShowList), pendingAlarm)

Pada dasarnya itu tidak ada yang istimewa, hanya memastikan bahwa niat memiliki aksi dan kelas target, yang merupakan penerima siaran dalam kasus saya.

Yuriy Kulikov
sumber
Sayangnya tidak berhasil. Itu yang saya coba. Lihat file di sini: github.com/yuriykulikov/AlarmClock/issues/…
pengembang android
Saya telah memeriksa kode Anda di GitHub. Penerima siaran bekerja setelah aplikasi dihapus dari recents di Moto Z2 Play. Saya dapat mencobanya pada Pixel, tetapi kode saya anggap ok. Menghentikan paksa aplikasi menghilangkan alarm yang dijadwalkan, tetapi ini akan terjadi pada aplikasi apa pun yang dipaksa berhenti.
Yuriy Kulikov
Saya sudah menunjukkan beberapa kali: semua yang saya lakukan setelah penjadwalan adalah menghapus dari tugas-tugas terbaru. Dan saya melakukannya di kedua emulator dan Pixel 4.
Pengembang android
Silakan periksa apakah menggunakan pendingShowList menghindari masalah dan jika ya, saya akan memperbarui jawabannya. Mungkin itu akan bermanfaat bagi seseorang.
Yuriy Kulikov