时间:2021-05-20
Manifest.xml文件:
复制代码 代码如下:
<service
android:name=".DaemonService"
android:enabled="true"
android:process=".DaemonService" >
<intent-filter android:priority="1000">
<action android:name="cn.test.DaemonService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
注释:因为我们这个服务要一直在后台运行,所以不采用bindService的方式,而是直接采用startService的方式。
这样就不至于我们的程序结束,也把我们的服务也结束掉了。
复制代码 代码如下:
package cn.start.test;
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 文件:
复制代码 代码如下:
<receiver android:name=".StartupReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
复制代码 代码如下:
public class StartupReceiver extends BroadcastReceiver {
@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");
来启动自己的程序。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Kotlin基础教程之类、对象、接口Kotlin中类、接口相关概念与Java一样,包括类名、属性、方法、继承等,如下示例:interfaceA{funbar()
基础教程介绍了基本概念,特别是对象和类。进阶教程对基础教程的进一步拓展,说明Python的细节。希望在进阶教程之后,你对Python有一个更全面的认识。之前我们
应朋友们反馈的Android基础薄弱的问题,决定出一套Android基础教程,帮助大家复习,巩固Android基础,今天要讲的是Android中的Intent实
Kotlin基础教程之数组容器ArraysKotlin标准库提供了arrayOf()创建数组,**ArrayOf创建特定类型数组valarray=arrayOf
kotlin基础教程之类和继承类声明使用class关键字声明类,查看其声明格式::modifiers("class"|"interface")SimpleNam