【问题标题】:How to set an alarm with jetpack compose?如何使用 jetpack compose 设置警报?
【发布时间】:2022-09-28 03:06:41
【问题描述】:

我正在尝试使用 Jetpack Compose 设置警报但不起作用我正在尝试使用模拟器和在主线程上运行的应用程序进行测试,这是我的代码:

class MainActivity : ComponentActivity() {
    lateinit var navController: NavHostController
    private var alarmMgr: AlarmManager? = null
    private lateinit var alarmIntent: PendingIntent
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val context= LocalContext.current
            navController = rememberNavController()
            NotePadReminderTheme {

                val calendar: Calendar = Calendar.getInstance().apply {
                    timeInMillis = System.currentTimeMillis()
                    set(Calendar.HOUR_OF_DAY,6)
                    set(Calendar.MINUTE,34)
                }
                val alarmManager =
                    context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager
                val intent = Intent(context, AlarmReceiver::class.java)
                val pendingIntent =
                    PendingIntent.getService(context, 3, intent,0)

                alarmManager?.setExact(AlarmManager.ELAPSED_REALTIME,calendar.timeInMillis,pendingIntent)

//                MainPage(navController =navController )
            }
        }
    }
}

这是我的 Manifest.xml:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
    xmlns:tools=\"http://schemas.android.com/tools\">

    <uses-permission android:name=\"android.permission.SCHEDULE_EXACT_ALARM\" />
    <application
        android:allowBackup=\"true\"
        android:dataExtractionRules=\"@xml/data_extraction_rules\"
        android:fullBackupContent=\"@xml/backup_rules\"
        android:icon=\"@mipmap/ic_launcher\"
        android:label=\"@string/app_name\"
        android:roundIcon=\"@mipmap/ic_launcher_round\"
        android:supportsRtl=\"true\"
        android:theme=\"@style/Theme.NotePadReminder\"
        tools:targetApi=\"31\">
        <activity
            android:name=\".MainActivity\"
            android:exported=\"true\"
            android:label=\"@string/app_name\"
            android:theme=\"@style/Theme.NotePadReminder\">
            <intent-filter>
                <action android:name=\"android.intent.action.MAIN\" />

                <category android:name=\"android.intent.category.LAUNCHER\" />
            </intent-filter>

            <meta-data
                android:name=\"android.app.lib_name\"
                android:value=\"\" />
        </activity>
        <receiver android:name=\"com.mobile.notepadreminder.AlarmReceiver\" />
    </application>

</manifest>

这是我的 AlarmReceiver 类:

class AlarmReceiver: BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d(\"alarm\",\"received\")
    }
}

我不知道为什么不起作用。 我的问题是我设置了闹钟并且闹钟永远不会运行。

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如它目前所写的那样,很难准确地说出你在问什么。
  • 您使用哪个 android 版本进行测试,您的目标是哪个版本?
  • 您正在使用AlarmManager.ELAPSED_REALTIME,这是自使用System.currentTimeMillis() 启动以来的时间,这实际上无法正常工作。你可能想要AlarmManager.RTC

标签: android-jetpack-compose


【解决方案1】:

我唯一需要的是将 getService 方法更改为 getBroadcast 但我不知道为什么

class MainActivity : ComponentActivity() {
        lateinit var navController: NavHostController
        private var alarmMgr: AlarmManager? = null
        private lateinit var alarmIntent: PendingIntent
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContent {
                val context= LocalContext.current
                navController = rememberNavController()
                NotePadReminderTheme {
    
                    val calendar: Calendar = Calendar.getInstance().apply {
                        timeInMillis = System.currentTimeMillis()
                        set(Calendar.HOUR_OF_DAY,6)
                        set(Calendar.MINUTE,34)
                    }
                    val alarmManager =
                        context.getSystemService(Context.ALARM_SERVICE) as? AlarmManager
                    val intent = Intent(context, AlarmReceiver::class.java)
                    val pendingIntent =
                        PendingIntent.getBroadcast(context, Date().seconds, intent, PendingIntent.FLAG_IMMUTABLE)
    
                    alarmManager?.setExact(AlarmManager.ELAPSED_REALTIME,calendar.timeInMillis,pendingIntent)
    
    //                MainPage(navController =navController )
                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 2023-01-03
    • 2021-11-03
    • 2023-02-12
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多