制作一个自动重启软件

一、软件功能

 

1.能够设置重启次数;

2.能够设置重启等待时间;

3.能够开机后自动运行;

4.能够随时取消重启计数。

 

二、技术要点

 

1.开机自动运行;

2.调用系统重启命令;

3.计数重启参数。

 

三、实现步骤

 

1.开机自动运行

<receiver android:name="BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver>

写一个Receiver继承BroadCastReceiver,在manifest里面按照上面的方式设置一下intent-filter,然后在OnReceive方法中写跳转到Activity的代码,这样应应用即可实现开机启动。

 

2.调用系统重启命令

首先需要在manifest里面加入权限

android:sharedUserId="android.uid.system"

<uses-permission android:name="android.permission.REBOOT" />

然后便是调用Java代码如下

Intent reboot = new Intent(Intent.ACTION_REBOOT); reboot.setAction("android.intent.action.REBOOT"); reboot.putExtra("nowait", 1); reboot.putExtra("interval", 1); reboot.putExtra("window", 0); sendBroadcast(reboot);

最后很关键的一点是生成之后的apk需要用系统的证书签名,具体步骤如下

(1)在签名之前需要清空apk之前的签名(如果有的话),删除掉META-INF目录下CERT开头的两个文件;

(2)找到密钥文件,在Android源码目录中的位置是"build/target/product/security",下面的platform.pk8和platform.x509.pem两个文件,然后,用Android提供的SignApk工具来签名,signapk的源代码是在"build/tools/signapk"下,这时得为下面的编译工作做些准备:
编译jar
命令行cd到signapk.java代码目录下,
javac signapk.java
获取SignApk$SignatureOutputStream.class和SignApk.class

建立目录s/com/android/signapk,将两个class文件放入目录下
jar cvfm signapk.jar SignApk.mf -C s/ .
注意:"s/"后面的"."前面有空格
生成signapk.jar文件,得到了Android提供的签名程序signapk.jar

直接去网上下了一个别人已经弄好的signapk.jar

接着用命令行命令

java -jar signapk.jar platform.x509.pem platform.pk8 D:/Reboot.apk D:/RebootSigned.apk
签名后的apk就可以成功安装到目标机器上去了。

 

3.计数重启参数

首先存储参数我使用的是SharedPreferences方法,代码如下

prefs = PreferenceManager.getDefaultSharedPreferences(this); private void read_status() { this.rebootTimes = prefs.getInt(REBOOT_TIMES, 1); this.rebootFrequency = prefs.getInt(REBOOT_FREQUENCY, 20); this.totalTimes = prefs.getInt(TOTAL_TIMES, 20); } public void save_status(int rebootTimes, int rebootFrequency, int totalTimes) { Editor editor = prefs.edit(); editor.putInt(REBOOT_TIMES, rebootTimes); editor.putInt(REBOOT_FREQUENCY, rebootFrequency); editor.putInt(TOTAL_TIMES, totalTimes); editor.commit(); }

因为需要随时可以取消自动重启,所以这里使用的Handler的postDelayed()方法,线程定义如下

myTimerThread = new Runnable() { @Override public void run() { if (count > 0) { try { sendMsg(UpdateMsgText, String.valueOf(count--)); } catch (Exception e) { e.printStackTrace(); } timerHandler.postDelayed(myTimerThread, 1000); } else { startReboot(); } } };

上面的代码实现的就是每隔1秒运行一下此线程。

如果需要取消掉自动重启只需要把计划remove掉就可以了,代码如

timerHandler.removeCallbacks(myTimerThread);

 

关于自动重启软件就写到这里,欢迎大家指正。

你可能感兴趣的:(java,android,exception,jar,Class)