我正在编写有关通知的应用程序。我想在每天下午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;
}
}
答案 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。