【问题标题】:Is my alarmManager code, capable to send broadcast?我的 alarmManager 代码是否能够发送广播?
【发布时间】:2021-11-22 22:51:00
【问题描述】:

我正在尝试创建一个警报管理器,它在咨询其他 Stackoverflow 代码的特定时间每 24 小时发送一次通知。我在下面尝试了这段代码,但 onReceive() 永远不会被执行。我做错了什么?

private var HOUR_TO_SHOW_PUSH = 21
private var MINUTE_TO_SHOW_PUSH = 0
private val REQUEST_CODE = 100
private lateinit var alarmManager: AlarmManager
private lateinit var pendingIntent: PendingIntent

class MainActivity : AppCompatActivity() {
...
        alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val intent = Intent(this, AlertReceiver::class.java)
        pendingIntent = PendingIntent.getBroadcast(this, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        val calendar = GregorianCalendar.getInstance().apply {
            if (get(Calendar.HOUR_OF_DAY) >= HOUR_TO_SHOW_PUSH) {
                add(Calendar.DAY_OF_MONTH, 1)
            }
            set(Calendar.HOUR_OF_DAY, HOUR_TO_SHOW_PUSH)
            set(Calendar.MINUTE, 0)
            set(Calendar.SECOND, 0)
            set(Calendar.MILLISECOND, 0)
        }
        alarmManager.setRepeating(
            AlarmManager.RTC_WAKEUP,
            calendar.timeInMillis,
            AlarmManager.INTERVAL_DAY,
            pendingIntent
        )

AlertReceiver

class AlertReceiver: BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
       
        override fun onReceive(context: Context?, intent: Intent?) {
        Toast.makeText(context, "Alarm", Toast.LENGTH_LONG).show()
        println("Alarm")
        Log.e("Alarm","Alarm Triggered")
    }

清单

<receiver
  android:name=".AlertReceiver"
  android:enabled="true"
  android:exported="true">
    <intent-filter>
       <action android:name="android.intent.action.BOOT_COMPLETED" />
       <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
       <action android:name="MyBroadcastReceiverAction"/>
   </intent-filter
</receiver>

【问题讨论】:

  • 你在注册你的接收器吗?
  • 您在 Manifest 中注册了接收方吗? &lt;receiver android:name=[Path to receiver class] /&gt;
  • 是的,我已经注册了我的接收器,我用我的接收器编辑了我的主题。

标签: android kotlin broadcastreceiver alarmmanager android-alarms


【解决方案1】:

通常您会像这样在AndroidManifest 中注册您的接收器:

<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

https://developer.android.com/guide/components/broadcasts

【讨论】:

  • 是的,我已经注册了我的接收器,我用我的接收器编辑了我的主题。
【解决方案2】:

这取决于设备应用到应用程序的电池优化,它因设备制造商而异
一般你会在Settings &gt; Apps &gt; "your app name" &gt; Battery Saver找到,设置为No Restrictions

【讨论】:

猜你喜欢
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多