使用日历时间检查运行服务

时间:2016-05-12 08:51:55

标签: android service timer

我正在编写有关通知的应用程序。我想在每天下午6点(无论是分钟还是秒)通知用户,即使他们关闭应用程序。我使用服务让程序运行而无法关闭(服务 - > onStartCommand - > STICKY)。 我知道函数onStartCommand可以帮我查一下时间。但它只能检查一次,而不是每次都检查。我找到了将一些代码行写入服务类的方法,以便每次都检查它。 这是我的服务类:

package com.truonghau.smstoxls.service;

import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import com.truonghau.xmeasure.commons.Constants;
import com.truonghau.xmeasure.commons.SmSUtils;

import java.util.Calendar;

/**
 * Created by HieuK on 12/05/16.
 */
public class Services extends Service {
    private static final String LOG_TAG = "ForegroundService";
    public static boolean IS_SERVICE_RUNNING = false;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        NotificationManager mNM = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
        if (intent.getAction().equals("BD"))
        {
            Calendar cal = Calendar.getInstance();
            int h18 = cal.get(Calendar.HOUR_OF_DAY);
            if (h18 == 18)
            {
                //solve
            }
            SmSUtils.showNotification(getApplicationContext(),mNM,"Started",false);
        }
        if (intent.getAction().equals("KT"))
        {
            SmSUtils.showNotification(getApplicationContext(),mNM,"Ended",false);
            stopForeground(true);
            stopSelf();
        }

        return START_STICKY;
    }
}

2 个答案:

答案 0 :(得分:1)

AlarmManager是您工作人员的最佳选择,但您必须做更多事情。那些是:

重启设备后,您的服务无法自动启动。要启动服务,您必须添加一个广播接收器,它将在设备重启时触发。在您的广播接收器的onReceive中,您只需开始使用您的服务。  以下是示例代码:

    public class BootStartUpReciever extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            //start your service here
        }}

menifest.xml文件

中添加此行代码
            <receiver
                android:name="MY_PACKAGE_NAME.BootStartUpReciever"
                android:enabled="true"
                android:exported="true" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                </intent-filter>
            </receiver>

希望,这会对你有所帮助:)。

答案 1 :(得分:0)

使用alarm manager会更好。另请阅读此tutorial