【问题标题】:AlarmManager BroadcastReceiver, onReceive never calledAlarmManager BroadcastReceiver,onReceive 从未调用过
【发布时间】:2018-05-18 16:01:11
【问题描述】:

我正在制作一个闹钟应用程序,我想测试 AlarmManager 类来安排一个事件让我在应用程序关闭时执行而不是常规操作系统闹钟我自己的自定义闹钟这就是我不使用 AlarmClock 类的原因。出于某种原因,我的类中扩展 BroadcastReceiver 的 OnReceive() 方法永远不会被调用?我希望你们能提供帮助。此外,如果有更好的技术来实现预定的中断,我会很高兴知道,我喜欢你的输入。另请注意,我尝试过像这样放置接收器标签

<receiver android:name=".MyReciever"></receiver>  

在我的清单中的应用程序标签之间,但我得到相同的结果,我也知道我在我的类定义中拼错了 Reciever,但我在整个项目中保持一致。

这是我的 maifest 文件

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Alarm_clock_app.Alarm_clock_app" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
  <uses-sdk android:minSdkVersion="16" />
  <application android:label="Alarm_clock_app">
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" />
  </application>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
  <uses-permission android:name="android.permission.VIBRATE" />
</manifest>

这是我在 onCreate() 中的主要活动中调用的方法,此方法在我的主要活动类中

 public void sched()
        {


            Intent intent = new Intent(this,typeof(MyReciever));//create an intent with our custom broadcast reciever

            PendingIntent pIntent = PendingIntent.GetService(this,0,intent,PendingIntentFlags.UpdateCurrent);//get a pending intent made from our intent

            AlarmManager alarM = (AlarmManager) GetSystemService(AlarmService);//get alarm manager

            alarM.Set(AlarmType.RtcWakeup, DateTime.Now.Millisecond + 5 * 1000, pIntent);//schedule the alarm for 5,000 ms from now

        }

这是我扩展广播接收器的类

   [BroadcastReceiver(Enabled = true, Process = ":remote")]
    class MyReciever: BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Console.WriteLine("alarm has occuered"); 

        }
    }

【问题讨论】:

  • 您正在使用PendingIntent.GetService() 方法,该方法用于启动Service。如果要广播到BroadcastReceiver,请改用PendingIntent.GetBroadcast() 方法。 (顺便说一句,如果你编辑你的问题,它会被挤到活动队列的顶部。你不需要为同一件事发布另一个问题,尤其是不只是链接到前一个问题的问题。)
  • 谢谢,但这并没有解决问题
  • 好的,当你编辑你的问题时,确保它是值得的。不要仅仅改变一个字母就让它发生碰撞。将您的代码更新为您当前正在运行的内容,添加您正在观察的任何新行为,链接到您尝试实施的任何其他帖子或示例等。如果您编辑,至少修复您的语法、标点符号和拼写再来一次。

标签: java c# android xamarin.android alarmmanager


【解决方案1】:

尝试更改警报的第一个参数。设置方法 和/或使用日历日期设置:

{Calendar cal = Calendar.getInstance();
 cal.add(Calendar.SECOND, 5);
 alarM.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent);}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多