应用程序未在睡眠模式下运行?

时间:2011-12-10 12:29:50

标签: android

当手机未处于睡眠模式时,我的代码运行正常

我使用广播接收器在要更改日期时调用应用程序 代码如下

public class DateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("facebook_message", "Date Changed 1");

        intent=new Intent(context, project.runningservice.SendPost.class);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.HOUR_OF_DAY, 13);
        calendar.add(Calendar.MINUTE, 0);
        calendar.add(Calendar.SECOND, 0);
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        PendingIntent pi = PendingIntent.getService(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);

        try {
            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pi);
            Log.d("message", "Wait");
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

}

清单文件中的代码如下

.
.
<receiver android:name="project.datereceiver.DateReceiver"
                  android:process=":remote">
            <intent-filter>
                <action android:name="android.intent.action.DATE_CHANGED"/>
            </intent-filter>
        </receiver>
.
.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
.
.

我希望我的服务课每天早上8点运行,日期改变了 手机处于睡眠模式时无法正常工作。 请告诉我哪里出错了?

2 个答案:

答案 0 :(得分:1)

步骤1:完全摆脱DateReceiver(类和清单条目)。

第2步:修改与AlarmManager相关的代码,使用setRepeating()代替set()(以及使用未来的Calendar代码,就像您的代码一样~45%可能会在过去创建日期),并在您的应用首次运行和重新启动时调用该代码。

答案 1 :(得分:0)

试试这个:

System.currentTimeMillis().set(AlarmManager.RTC_WAKEUP, System.getTimeInMillis() + AlarmManager.INTERVAL_HOUR*13,pi);
相关问题