manifest.xml文件:
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
注释:因为我们这个服务要一直在后台运行,所以不采用bindservice的方式,而是直接采用startservice的方式。
这样就不至于我们的程序结束,也把我们的服务也结束掉了。
import java.util.list;
import android.annotation.suppresslint;
import android.app.activitymanager;
import android.app.service;
import android.app.activitymanager.runningappprocessinfo;
import android.content.intent;
import android.os.handler;
import android.os.ibinder;
import android.util.log;
public class daemonservice extends service {
private static final string tag = "alarmreceiver";
handler hd1 = new handler();
int delay = 5000;
public ibinder onbind(intent intent) {
// todo auto-generated method stub
return null;
}
@suppresslint("newapi")
public void oncreate() {
system.out.println("服务启动成功。。。。。。。。。。");
hd1.postdelayed(mtasks, delay);
}
private runnable mtasks = new runnable() {
@suppresslint("newapi")
public void run() {
android.os.process.setthreadpriority(android.os.process.thread_priority_foreground);
if (checkmainappisactive()) {
log.d(tag, "服务检测主应用还在运行");
} else {
log.d(tag, "服务检测主应用已经关闭");
intent intent = getpackagemanager().getlaunchintentforpackage(
"cn.start.test");
if (intent != null) {
daemonservice.this.startactivity(intent);
log.d(tag, "服务启动主应用程序。");
} else {
log.d(tag, "服务检测到没有安装主应用,自动退出。");
return;
}
}
hd1.postdelayed(mtasks, delay);
}
};
/**
* 检测是否主程序是否还在运行
* @return
*/
@suppresslint({ "newapi", "newapi" })
public boolean checkmainappisactive(){
activitymanager am = (activitymanager) getsystemservice(activity_service);
//获取正在运行的应用
list<runningappprocessinfo> run = am.getrunningappprocesses();
for(runningappprocessinfo ra : run){
if(ra.processname.equals("cn.start.test")){
return true;
}
}
return false;
}
}
开机自动启动程序,自然少不了开机启动广播了。
manifest.xml 文件:
@override
public void onreceive(context context, intent intent) {
// todo auto-generated method stub
intent i = new intent(context,loginactivity.class);
i.setflags(intent.flag_activity_new_task);
context.startactivity(i);
intent serviceintent = new intent(context,daemonservice.class);
context.startservice(serviceintent);
}
}
总结:开机启动广播一定在manifest文件中注册好。定时器要注意定时延迟。
通过list<runningappprocessinfo> run = am.getrunningappprocesses();判断自己的进程是否还在运行
通过getpackagemanager().getlaunchintentforpackage( "cn.start.test"); getpackagemanager().getlaunchintentforpackage( "cn.start.test");
来启动自己的程序。
如对本文有疑问, 点击进行留言回复!!
IjkPlayer【1】 Demo Android的最简单实现
一起Talk Android吧(第二百六十回:Android中的BottomNavigationView概述)
网友评论