Android AlarmManager不会调用广播接收器

时间:2013-08-26 18:23:17

标签: java android alarmmanager

好吧,所以我尝试了我能找到的一切,它不起作用。这是我的代码。有人能告诉我为什么它不会打电话给接收者吗?

的AndroidManifest.xml

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

AlarmReciever.java

public class AlarmReciever extends BroadcastReceiver 
{

    private static final Logger LOGGER = Logger.getLogger(LogService.class);

      @Override
      public void onReceive(Context context, Intent intent) 
      {

         LOGGER.debug("BroadcastReceiver, in onReceive:");

      }
}

DeviceMonitor.java

public class DeviceMonitor extends Service 
{
    public int onStartCommand(Intent intent, int flags, int startld) 
    {

        LOGGER.debug("alarmmanger settting from on start");

        AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Intent I = new Intent(this, AlarmReciever.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, I, 0);
        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());
        time.add(Calendar.SECOND, 5);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);

        LOGGER.debug("alarmmanger set from on start");
    }
}

3 个答案:

答案 0 :(得分:0)

也许更多的描述可能有用,例如你没有从你的代码中获取日志消息,或者它抛出异常或...

但是我有一个工作代码,它实现了与您在问题中显示的相同的方法。不幸的是,你没有发布AndroidManifest.xml的所有相关部分,但我有这个,也许它会有所帮助。

    <receiver
        android:name="hu.fnf.devel.atlas.AtlasIncomingSMSReceiver"
        android:enabled="true"
        android:exported="true"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" >
            </action>
        </intent-filter>
    </receiver>

当收到新短信时,这会调用AtlasIncomingSMSReceiver类。

答案 1 :(得分:0)

我似乎通过使用xml文档中的完全限定路径名来解决问题

<receiver
    android:name="com.realityi.measy.mdm.logs.AlarmReciever"
    android:enabled="true"
    android:exported="true">
</receiver>

我可以使用

对其进行故障排除
Intent i = new Intent();
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(i);

强制发送boradcast

真的希望有人希望这个。我是Android开发的新手,这让我很难过。

答案 2 :(得分:0)

我认为如果你在android清单文件中使用AlarmReceiver而不是.AlarmReceiver,它将会起作用。