如何让android应用程序只在factory reset后开机自启动
来源:互联网 发布:最全短期网络理财投资 编辑:程序博客网 时间:2024/05/02 01:57
该讨论分两个部分,第一,如何让应用程序开机自启动。第二,如何让应用程序只有在factory reset 后才子启动。方法如下:
1.让程序开机自启动
首先,只需要监听一个开机启动的Broadcast(广播)即可。首先写一个Receiver,继承BroadcastReceiver。
public class OOBEBroadcastReceiver extends BroadcastReceiver {
private static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
public static final String filePath = "/data/data/com.android.OOBE/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_COMPLETED.equals(intent.getAction()))
{/*做想做的事情,例如启用一个activity,service等*/}
}
}
其实,我们只需要在应用程序配置文件AndroidManifest.xml中注册这个Receiver来监听系统启动事件即可:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".OOBEBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</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 = rd.read(buf, 0, 99); //将数据读入字符列表buf内。
buf[count] = '\n';
String currentModeValues = new String(buf, 0, count);//将字符列表中的字符赋给String类对象if ((currentModeValues.compareTo(defaultModeValues)) == 0)
throw new MyException("Default Value Detected, exit");
}
catch (FileNotFoundException e1)
{ /*文件不存在,证明用户尚未在data区创建文件,可以启动该应用。本例是个启动一个activity:OOBE*/
Intent starterIntent = new Intent(context, OOBE.class);
starterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(starterIntent);
}
catch(Exception e2)
{
Log.e("Receiver: EXCEPTION ", e2.toString()); // 条件字符已经写入,可以做相应更复杂的处理。此例不需要。
};
ii 应用程序跑完后,设置标志。在OOBE这个activity中,结束的时候,写入字符串到文件,来设置已运行完毕的标志。
byte[] setflag = new byte[20];
String setflagValues = "1 1 0 0 1 0 1" + "\n";
setflag = setflagValues.getBytes();
fos = Finish.this.openFileOutput("outputmode_set", MODE_WORLD_READABLE);//将字符setflagValues 输出到文件outputmode_set中
fos.write(setflag);
这样的话,在receiver里面判断这个文件是否存在,字符串是否匹配,就可以做不同的处理。
备注:
关于openFileOutput()方法:
第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android会自动创建它。创建的文件保存在/data/data/<packagename>/files目录。
第二参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
- 如何让android应用程序只在factory reset后开机自启动
- 如何让Android应用程序只在factory reset后开机自启动
- 如何让应用程序在开机后自动启动?
- 如何让应用程序在计算机开机后延迟启动?
- android 开机自启动应用程序
- 如何让应用程序只启动一个实例
- 如何让apk开机自启动
- 【转】如何编写Symbian 3rd 应用程序,让手机开机自启动
- android 应用程序实现开机自启动
- Android应用程序的开机自启动
- android实现应用程序的开机自启动
- Android实现应用程序的开机自启动
- android实现应用程序的开机自启动
- android应用程序开机自启动方法
- Android之应用程序监听开机启动自启动应用程序
- 【开机自启动】开机自启动应用程序
- Android如何实现开机自启动Service
- Android应用如何开机自启动、自启动失败原因
- Android消息机制(一)
- zoj 1025 Wooden Sticks (DP子序列)(第100,纪念一下)
- Android消息处理机制(二)
- 智能应用中八个常见的误区
- 将web对象传给javascript控件,从而得到其id。。
- 如何让android应用程序只在factory reset后开机自启动
- 现在主流免杀是源码免杀
- SQL Server 定时作业的制定
- Activity组件
- push, pop, min 都为O(1)的栈
- getopts 命令用法总结
- python调试第一战——PDB
- 静态库*.a和动态库*.so生成及调用
- 判断字段col是否为空或者是empty_blob()