问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何让Android应用程序只在factory reset后开机自启动

发布网友 发布时间:2022-05-15 08:28

我来回答

1个回答

热心网友 时间:2023-10-15 17:41

  有一些开机自启动的应用程序,只需要在factory reset后启动即可,其它时候并不需要自启动。
  该讨论分两个部分,第一,如何让应用程序开机自启动。第二,如何让应用程序只有在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:表示当前文件可以被其他应用写入。

转载  
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 刷机时出现“factory reset ”后,该怎么确定,然后呢 factory reset什么意思 factory reset是什么意思 Factory Reset 是什么意思 哪位高手能告诉我,在大连哪里可以考ABS船级社的焊工证啊? 我是外地人,想在大连办理电焊工证,操作证资格证到哪里去办理? 我以前考过中国船级社发的焊工证在大连考的 我是大连长兴岛人,我要考一个焊工全能证,请问在哪考 本人现在在大连市里不知道去哪里考一个焊工操作证?公司要查证 数字电视机顶盒 能不能做 视频转换器? 大连电焊工考试哪里有 我想知道在大连怎样考取电焊工资格证和上岗证,具体考什么在哪考? 大连现在靠考焊工证需要多少钱呀? 大连考焊工证 大连焊工证怎么考去哪报名,焊工上岗证 数字电视机顶盒转换器安装合法吗? iphone五的微信摇一摇为什么没有声音 手机微信摇一摇没声音怎解决 微信摇一摇没声音了,微信-设置-通用-声音-都打开了,可是还是没有声音呀 三星手机g5308微信摇一摇没声音怎么解决 QQ号不是本机号码申请的怎么登录我的QQ号不是自己的手机号只知道密码他还要新设备登录验证咋办_百度问一问 医院放针头的锐器盒,多长时间更换一次 提高利器盒正确使用率PDCA 医用利器盒要怎么严格消毒才能反复使用? 用js写一个页面上有3个文本框,都输入数字,前两个表示最大值max和最小值min,第三个 支付功能被限制能注销实名吗? 如何查驾驶证档案 锐器盒不用的时候要盖住嘛 锐器盒放置的位置什么日方便使用 支付功能被限制能注销实名吗? 表示大河的词语 形容大河的词语有哪些 求描写大河的四字词 工商银行信用卡账单日问题? 描写大河的词语 什么的大河填词语 形容大江大河的词语? 如何在excel中对文本进行多条件筛选? 对文本筛选,不包含 漂亮 外观 手感 边框 这种词 excel文本筛选两个文本条件。比如一个要包括重庆 梦见大风吹自己身上有虫子