Android之——利用系统权限实现手机重启(获取系统权限签名详解)
转载请注明出处: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程序员最基本的开发常识和规范,我在这里只是为了方便直接写在了类和布局文件中。
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
- Android(安卓)M App 永久隐藏导航栏的Solution
- 实现Unity和Android进行交互
- 巨头为何纷推智能手机OS?
- Android(安卓)AIDL IPC机制详解