Android Pending Intent与Alarm Manager无法正常工作

时间:2014-04-01 10:55:05

标签: android

不确定这里有什么问题。以下代码不起作用。我在使用类似代码之前使用了未决意图,但从未遇到过这个问题。请帮助。

来自Main.java的日志语句正在打印,但没有任何内容从PublicData.class

中记录

Main.java

AlarmManager alarm;
long gap = 1800000;
Calendar cal;

Log.d("Stoned", "pending intent about to create");
Intent i = new Intent(this, PublicData.class);
PendingIntent pint = PendingIntent.getService(
        this, 0, i, 0);
Log.d("Stoned", "pending intent creating");
alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(),
        gap, pint);
Log.d("Stoned", "pending intent created");

PublicData.java

public class PublicData extends IntentService {


    @Override
    protected void onHandleIntent(Intent intent) {
            Log.d("Stoned", "In pending intent");

    }

.
.

2 个答案:

答案 0 :(得分:0)

问题是当第一次调用警报时,第二个参数是偏移量。如果您使用当前时间,这将需要数千小时才能首次呼叫......

alarm.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), gap, pint);

应该(立即重复)

alarm.setRepeating(AlarmManager.RTC, 0, gap, pint);

另请参阅:http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating%28int,%20long,%20long,%20android.app.PendingIntent%29


编辑:

您也可以使用:

long interval = DateUtils.SECOND_IN_MILLIS * 30;
long firstWake = System.currentTimeMillis() + interval;
am.setRepeating(AlarmManager.RTC_WAKEUP, firstWake, interval, pendingIntent);

答案 1 :(得分:0)

如果其他人遇到同样的问题,以下事情对我有用。我在清单中的服务声明中添加了“android:exported =”true“'。此外,我使用整个packagename而不仅仅是服务的classname。它在进行这些更改后起作用。

<service android:name="com.abc.def.PublicData" android:exported="true" >