转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47687027

 在应用开发时经常会有这样的需求,如何在应用里用代码让手机重启,另外,我们知道在重启之后,我们的应用可以注册广播接收者,以保证我们的应用会第一个将我们的服务开启起来,这样我们的代码就可以第一个接收到接收短信的广播事件。好了,现在就让我们一起来实现一个利用系统权限实现手机重启的示例吧。

一、实现

我们实现很简单,就是给界面一个按钮,然后设置按钮的点击事情,在点击事件里完成手机重启操作。

1、布局文件

布局文件很简单,就是放置了一个Button按钮,设置点击事件。

具体代码如下:

    

2、MainActivity

这个类中就是实现了按钮的点击事件,在点击事件里实现重启手机的操作。

package com.lyz.reboot.activity;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public void click(View v){Intent intent = new Intent();intent.setAction(Intent.ACTION_REBOOT);intent.putExtra("nowait", 1);intent.putExtra("interval", 1);intent.putExtra("window", 0);sendBroadcast(intent);}}

3、授权文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>                                                                                    

三、运行效果

按照以上的实现,我们开始运行程序,然后点击按钮会报以下错误信息

Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.REBOOT from pid=1786, uid=10033
这是因为 Android系统里有很多限制性操作是不允许一般应用程序调用的,比如说:重启手机、关闭手机、修改系统时间、访问受限制的文件等。

四、重新实现

1、解决思路

将我们的应用伪装成系统的应用

2、实现步骤

共享系统 UID 使用系统签名(匹配签名需要公钥和密钥两个文件生成 keystore

3、具体实现

1)修改AndroidManifest.xml

我们在AndroidManifest.xml文件的manifest节点中增加如下属性,来共享系统uid

android:sharedUserId="android.uid.system"
完整代码如下:

<?xml version="1.0" encoding="utf-8"?>                                                                                    

2)利用eclipse生成apk文件

选中要生成apk文件的工程,右键导出项目到指定目录(具体步骤我在这里就不多说明了)。

3)利用签名工具生成系统签名apk

这里我用了一个工具来生成系统签名apk,大家可以到链接http://download.csdn.net/detail/l1028386804/9010161下载这个签名工具文件,下载后解压这个工具的目录结构如下图:

我们将导出的apk文件放到上图所示的文件夹中

如下图:

然后我们打开cmd控制台,进入上图所示的目录中,按以下格式输入命令:

java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk
其中input.apk为要签名的apk文件, output.apk为签名后输出的apk文件
操作如下图所示:

这里我输入的命令是:

java -jar signapk.jar platform.x509.pem platform.pk8 reboot.apk new.apk
命令执行后在当前目录下会生成一个带有系统签名的一个apk,这个apk文件为new.apk,

如下图:

这个new.apk文件就是我们最终生成的apk文件。

4)安装apk文件

首先,我们先要卸载的手机上原来安装的apk文件,然后,在命令行中输入如下命令安装new.apk文件

adb install new.apk
前提是命令行当前目录时new.apk文件所在的目录,具体操作见下图:

如果安装后提示"Success"就是安装成功了。

五、运行

点击按钮运行效果为

以上就实现了Android利用系统权限实现手机重启的功能。

六、温馨提示

大家可以到链接http://download.csdn.net/detail/l1028386804/9010161下载Android生成系统签名的文件。可以到链接http://download.csdn.net/detail/l1028386804/9010167下载Android利用系统权限实现手机重启的完整示例源代码

本实例中,为了方面,我把一些文字直接写在了布局文件中和相关的类中,大家在真实的项目中要把这些文字写在string.xml文件中,在外部引用这些资源,切记,这是作为一个Android程序员最基本的开发常识和规范,我在这里只是为了方便直接写在了类和布局文件中。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  6. Android(安卓)M App 永久隐藏导航栏的Solution
  7. 实现Unity和Android进行交互
  8. 巨头为何纷推智能手机OS?
  9. Android(安卓)AIDL IPC机制详解

随机推荐

  1. jenkins打包文件上传七牛云
  2. jenkins轮询任务
  3. smobiler仿饿了么app搜索页面
  4. 为什么Python受关注?Python热门的原因!
  5. 从某人的公众号学到一个网上学习资源搜索
  6. 一文读懂HTTP常见状态码
  7. 视频播放如何更安全流畅?看南非影音娱乐DS
  8. JavaEE面试题总结,一篇文章带你攻克面试难
  9. java使用 Cookie 和 JWT 身份验证
  10. SSM三大框架整合详细教程(Spring+SpringMV