Saya menggunakan a AlarmManager
untuk memicu niat yang menyiarkan sinyal. Berikut ini adalah kode saya:
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, Wakeup.class);
try
{
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
Long elapsed += // sleep time;
mgr.set(AlarmManager.RTC_WAKEUP, elapsed, pi);
}
catch(Exception r)
{
Log.v(TAG, "RunTimeException: " + r);
}
Saya memanggil kode ini dari Activity
, jadi saya tidak tahu bagaimana saya bisa mendapatkan kesalahan berikut ...
ERROR/AndroidRuntime(7557): java.lang.RuntimeException: Unable to start receiver com.wcc.Wakeup: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Untuk Beberapa Instance dari aktivitas yang sama, gunakan cuplikan berikut,
Catatan : Cuplikan ini, saya gunakan di luar
Activity
. PastikanAndroidManifest
file Anda tidak mengandungandroid:launchMode="singleTop|singleInstance"
. jika perlu, Anda dapat mengubahnya keandroid:launchMode="standard"
.Ini berfungsi baik untuk saya. Semoga ini menghemat waktu untuk seseorang. Jika ada yang menemukan cara yang lebih baik, silakan berbagi dengan kami.
sumber
Android Doc mengatakan -
Itu artinya untuk
(Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
itu wajib menambahkanIntent.FLAG_ACTIVITY_NEW_TASK
sambil meneleponstartActivity()
dari luarActivity
konteks.Jadi lebih baik menambahkan bendera untuk semua versi -
sumber
Anda tidak menempel bagian yang Anda panggil
startActivity
, itu bagian yang menarik.Anda mungkin memanggil
startActivity
dalamService
konteks, atau dalamApplication
konteks.Cetak "ini" untuk mencatat kucing sebelum melakukan
startActivity
panggilan, dan lihat apa yang dimaksud, kadang-kadang kasus penggunaan batin "ini" secara tidak sengaja.sumber
Terkadang kesalahan ini dapat terjadi tanpa panggilan eksplisit ke
startActivity(...)
. Misalnya, beberapa dari Anda mungkin telah melihat jejak tumpukan seperti ini di Crashlytics:Dan Anda mungkin bertanya-tanya apa yang Anda lakukan salah, karena jejaknya hanya mencakup kode kerangka kerja. Nah, inilah contoh bagaimana ini bisa terjadi. Katakanlah kita berada dalam sebuah fragmen.
Sekarang, ketika pengguna mengklik pada tampilan teks itu, aplikasi Anda akan macet dengan jejak tumpukan di atas. Ini karena inflater tata letak memiliki referensi ke konteks aplikasi , dan karenanya tampilan teks Anda memiliki konteks aplikasi. Mengklik pada tampilan teks itu secara implisit memanggil
appContext.startActivity(...)
.Catatan akhir: Saya menguji ini pada perangkat Android 4, 5, 6, dan 7. Ini hanya memengaruhi 4, 5, dan 6. Perangkat Android 7 tampaknya tidak memiliki masalah saat memanggil
appContext.startActivity(...)
.Saya harap ini membantu orang lain!
sumber
Kesalahan yang sama ini saya hadapi jika mendapat Notifikasi di perangkat Android terbaru 9 dan 10.
Tergantung pada mode Luncurkan bagaimana Anda menanganinya. Gunakan kode di bawah ini: - android: launchMode = "singleTask"
Tambahkan bendera ini dengan Intent: - intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
sumber
Coba ubah ke baris ini:
sumber
Saya hanya ingin memperhatikan bahwa
startActivity
dari luar suatu kegiatan valid di beberapa versi android (antara N dan O-MR1) dan yang menarik adalah bahwa itu adalah bug dalam kode sumber android!Inilah komentar
startActivity
implementasi di atas . Lihat di sini .sumber
Ketika Anda ingin membuka suatu aktivitas di dalam aplikasi Anda maka Anda dapat memanggil metode startActivity () dengan parameter Intent as. Niat itu adalah aktivitas yang ingin Anda buka. Pertama, Anda harus membuat objek maksud itu dengan parameter pertama untuk menjadi konteks dan parameter kedua untuk menjadi kelas aktivitas yang ditargetkan.
Semoga ini bisa membantu.
sumber