App báo thức
- Alarm manager
- Room database
- Notification
- Service
- Broadcast receiver
- Material UI 3
- Jetpack compose
- Lên lịch để gọi một intent như service hoặc broadcast receiver
-
Để làm thiết bị sáng màn hình khi có thông báo báo thức làm thế nào ?
- Sử dụng loại alarm là RTC_WAKEUP
-
Nhiều hãng thiết bị của Trung Quốc chặn foreground service thì làm thế nào ?
- Những hãng như Xiaomi hay Oppo cần xin quyền Auto run
- Run activity intent với các action theo từng hãng
/*** * Xiaomi */ private final String BRAND_XIAOMI = "xiaomi"; private String PACKAGE_XIAOMI_MAIN = "com.miui.securitycenter"; private String PACKAGE_XIAOMI_COMPONENT = "com.miui.permcenter.autostart.AutoStartManagementActivity"; /*** * Letv */ private final String BRAND_LETV = "letv"; private String PACKAGE_LETV_MAIN = "com.letv.android.letvsafe"; private String PACKAGE_LETV_COMPONENT = "com.letv.android.letvsafe.AutobootManageActivity"; /*** * ASUS ROG */ private final String BRAND_ASUS = "asus"; private String PACKAGE_ASUS_MAIN = "com.asus.mobilemanager"; private String PACKAGE_ASUS_COMPONENT = "com.asus.mobilemanager.powersaver.PowerSaverSettings"; /*** * Honor */ private final String BRAND_HONOR = "honor"; private String PACKAGE_HONOR_MAIN = "com.huawei.systemmanager"; private String PACKAGE_HONOR_COMPONENT = "com.huawei.systemmanager.optimize.process.ProtectActivity"; /** * Oppo */ private final String BRAND_OPPO = "oppo"; private String PACKAGE_OPPO_MAIN = "com.coloros.safecenter"; private String PACKAGE_OPPO_FALLBACK = "com.oppo.safe"; private String PACKAGE_OPPO_COMPONENT = "com.coloros.safecenter.permission.startup.StartupAppListActivity"; private String PACKAGE_OPPO_COMPONENT_FALLBACK = "com.oppo.safe.permission.startup.StartupAppListActivity"; private String PACKAGE_OPPO_COMPONENT_FALLBACK_A = "com.coloros.safecenter.startupapp.StartupAppListActivity"; /** * Vivo */ private final String BRAND_VIVO = "vivo"; private String PACKAGE_VIVO_MAIN = "com.iqoo.secure"; private String PACKAGE_VIVO_FALLBACK = "com.vivo.perm;issionmanager"; private String PACKAGE_VIVO_COMPONENT = "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity"; private String PACKAGE_VIVO_COMPONENT_FALLBACK = "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"; private String PACKAGE_VIVO_COMPONENT_FALLBACK_A = "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager"; /** * Nokia */ private final String BRAND_NOKIA = "nokia"; private String PACKAGE_NOKIA_MAIN = "com.evenwell.powersaving.g3"; private String PACKAGE_NOKIA_COMPONENT = "com.evenwell.powersaving.g3.exception.PowerSaverExceptionActivity";
-
Tùy hãng thiết bị sẽ có các nhạc chuông mặc định khác nhau. Vậy để lấy được những nhạc chuông đó có nhất thiết phải tìm các thư mục chứa nhạc chuông mặc định để lấy ra không ?
- Không, có activity để có thể lấy nhạc chuông của thiết bị
val pickSong = rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) { val toneUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { it.data?.getParcelableExtra( RingtoneManager.EXTRA_RINGTONE_PICKED_URI, Uri::class.java ) } else { it.data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) } Log.d("", "Alarm: uri = $toneUri") setTone(toneUri ?: RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)) } val intent = Intent(RingtoneManager.ACTION_RINGTONE_PICKER) intent.putExtra( RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM ) intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone") intent.putExtra( RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM) ) intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false) intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true) pickSong.launch(intent)
-
Các thiết bị hiện đại bây giờ thường chia nhiều loại âm thanh, phần lớn là 4 loại: Media, Ringtone, Notification, Alarm. Nếu dùng thư viện Media trong android thì sẽ phát ở loại media. Nhưng báo thức phải được phát ở loại Alarm thì làm thế nào ?
- Chưa biết các để kêu ở loại Alarm nhưng nếu mình dùng thư viện Ringtone thay thế thì nhạc sẽ phát ở Ringtone. Tạm chấp nhận vì Media thường sẽ lẫn với âm thanh của các ứng dụng media và dễ bị người dùng tắt.