7

在我的清单文件中,我已经声明了接收者。(如下)

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

但是,一旦我关闭了我的应用程序,我就无法获得警报和通知。显然,从未拨打OnReceive过我的电话。Broadcast receiver

public class OnAlarmReceive extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent arg1)
   {
       //various stuff
   }
}

在 MainActivity 中,我的警报管理器类如下。

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent("MY_ALARM_NOTIFICATION");
    intent.setClass(this, OnAlarmReceive.class);
    intent.putExtra("message", message);
    PendingIntent pendingIntent = PendingIntent
            .getBroadcast(MainActivity.this, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar timeCal = Calendar.getInstance();
    timeCal.set(Calendar.HOUR_OF_DAY, hour);
    timeCal.set(Calendar.MINUTE, minutes);

    alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent);

我的清单如下:

    <receiver android:name=".OnAlarmReceive">
    <intent-filter android:priority="1">  
        <action android:name="MY_ALARM_NOTIFICATION"/>  
    </intent-filter>  
</receiver>  

即使我关闭了我的应用程序,我应该怎么做才能接收通知/警报。后台服务?

4

6 回答 6

0

您应该在清单中添加意图过滤器,如

receiver android:name=".SmsBroadCastReceiver">  
        <intent-filter android:priority="20">  
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
        </intent-filter>  
    </receiver>  
于 2013-05-06T08:57:49.690 回答
0

正如龚聪所说,你需要声明你的接收者应该监听哪些事件。

例如 :

<receiver android:name=".OnAlarmReceive"> 

<intent-filter>  
    <action android:name="MY_ALARM_NOTIFICATION"/>
</intent-filter> </receiver> 

然后当您设置警报时,使用您的操作意图:

Intent intent = new Intent("MY_ALARM_NOTIFICATION");
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pi = PendingIntent.getBroadcast( this, 0, intent, 0 );
于 2013-05-06T09:03:13.070 回答
0

您的代码运行良好!

你所要做的就是改变这一行:

alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(),
pendingIntent);

有了这条线:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
SystemClock.elapsedRealtime() + 5000, pendingIntent);

即使应用程序未运行,“onReceive”中的代码也会在 5000 毫秒(5 秒)后运行

于 2013-12-31T00:01:21.173 回答
0

据我了解,在某些情况下,取决于实现方式,操作系统有权调整警报设置时间。因此,请尝试相应地使用 AlarmManager.set(...)、AlarmManager.setexact(...) 等。在某些情况下,根据制造商(自定义 Android 操作系统)的不同,操作系统可能会阻止火警警报。

于 2017-04-20T12:23:58.120 回答
0

即使在应用程序关闭时(我故意从任务列表中删除应用程序),在清单文件中添加android:exported="true"接收器也能帮助我接收警报(从而唤醒应用程序)。

于 2017-05-29T16:15:04.773 回答
-1

1.在清单文件中声明接收者:

<receiver android:name="your.package.name.TestAlarmReceiver"></receiver>

永远记住,整个 Android 系统是区分大小写的。因此,请检查您在 AndroidMainfest.xml 中的拼写是否正确。

2.如果您为您的Receiver创建一个PendingIntent,请添加一个requestCode- 即使它是一个随机数!没有你的onReceive代码永远不会被调用!

启动的函数AlarmManager应如下所示:

public static void scheduleTestAlarmReceiver(Context context) {
   Intent receiverIntent = new Intent(context, TestAlarmReceiver.class);
   PendingIntent sender = PendingIntent.getBroadcast(context, 123456789,  receiverIntent, 0);

   AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
   alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+startDelay, someDelay, sender);
}

广播接收器类:

package your.package.name;

public class TestAlarmReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent arg1) {
     // your code here!
   }
}

原始文章:为什么我的 BroadcastReceiver 没有被调用?

于 2016-02-17T12:51:50.100 回答