Android怎么让一个service开机自动启动 |
您所在的位置:网站首页 › 让一个程序开机启动 › Android怎么让一个service开机自动启动 |
Android中,当Service被kill后,如果重启需要使用BroadcastReceiver来实现,即广播接收者,例如利用BroadcastReceiver注册网络广播或者开关机广播,当接收到广播后直接启动service,这样就可以保证service被kill后,自动启动。 实现代码: 1在配置文件AndroidManifestxml中向系统注册BroadcastReceiver 2需要添加相应权限 3在Receiver中就可以添加开机,或者网络状态改变后需要进行的 *** 作 public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } 4执行 *** 作,Intent intent = new Intent(context,Serviceclass); contextstartService(intent); 这样即可开机,或者网络状态改变后启动Service了。 有一些开机自启动的应用程序,只需要在factory reset后启动即可,其它时候并不需要自启动。 该讨论分两个部分,第一,如何让应用程序开机自启动。第二,如何让应用程序只有在factory reset 后才子启动。方法如下: 1让程序开机自启动 首先,只需要监听一个开机启动的Broadcast(广播)即可。首先写一个Receiver,继承BroadcastReceiver。 public class OOBEBroadcastReceiver extends BroadcastReceiver { private static final String ACTION_BOOT_COMPLETED = "AndroidintentactionBOOT_COMPLETED"; public static final String filePath = "/data/data/comandroidOOBE/files/outputmode_set"; public static String defaultModeValues = "1 1 0 0 1 0 1" + "\n"; protected class MyException extends Exception { protected MyException(String msg){ super(msg); } } @Override public void onReceive(Context context, Intent intent) { if (ACTION_BOOT_COMPLETEDequals(intentgetAction())) {/做想做的事情,例如启用一个activity,service等/} } } 其实,我们只需要在应用程序配置文件AndroidManifestxml中注册这个Receiver来监听系统启动事件即可: 2 让程序只有在factory reset 后重启。 在android中有一块专门给user使用的data区。可以在data区创建一个文件,并写入数据。然后通过判断此文件是否存在,以及存在时数据是否正确来做相应的处理。 i 文件是否存在,以及数据是否匹配: 之前在OOBEBroadcastReceiver 中的onReceive()可以做收到消息后的处理。在这里可以加入: try { int count, i = 0; char[] buf = new char[100]; FileReader rd = new FileReader(filePath); //建立对象rd count = rdread(buf, 0, 99); //将数据读入字符列表buf内。 buf[count] = '\n'; String currentModeValues = new String(buf, 0, count);//将字符列表中的字符赋给String类对象 if ((currentModeValuescompareTo(defaultModeValues)) == 0) throw new MyException("Default Value Detected, exit"); } catch (FileNotFoundException e1) { /文件不存在,证明用户尚未在data区创建文件,可以启动该应用。本例是个启动一个activity:OOBE/ Intent starterIntent = new Intent(context, OOBEclass); starterIntentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK); contextstartActivity(starterIntent); } catch(Exception e2) { Loge("Receiver: EXCEPTION ", e2toString()); // 条件字符已经写入,可以做相应更复杂的处理。此例不需要。 }; ii 应用程序跑完后,设置标志。在OOBE这个activity中,结束的时候,写入字符串到文件,来设置已运行完毕的标志。 byte[] setflag = new byte[20]; String setflagValues = "1 1 0 0 1 0 1" + "\n"; setflag = setflagValuesgetBytes(); fos = FinishthisopenFileOutput("outputmode_set", MODE_WORLD_READABLE);//将字符setflagValues 输出到文件outputmode_set中 foswrite(setflag); 这样的话,在receiver里面判断这个文件是否存在,字符串是否匹配,就可以做不同的处理。 备注: 关于openFileOutput()方法: 第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android会自动创建它。创建的文件保存在/data/data//files目录。 第二参数用于指定 *** 作模式,有四种模式,分别为: ContextMODE_PRIVATE:为默认 *** 作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容 ContextMODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取; MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 转载 以上就是关于Android怎么让一个service开机自动启动全部的内容,包括:Android怎么让一个service开机自动启动、如何让Android应用程序只在factory reset后开机自启动、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力! 欢迎分享,转载请注明来源:内存溢出 原文地址:https://outofmemory.cn/zz/9745325.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |