Android ICS关机跟重新启动功能研究

简介: Android ICS关机跟重新启动功能研究            最近研究了一下android关机跟重新启动功能。网上的文章也不少,做法也有一些。

Android ICS关机跟重新启动功能研究

 

         最近研究了一下android关机跟重新启动功能。网上的文章也不少,做法也有一些。笔者试过了几种方法,下面介绍一下:

  <> Android重启功能

          在androidjava层执行shell命令来完成。但是笔者在开发测试中同样的代码发现用Eng编译出的版本可以重新启动,user版本不能完成重启,挂在关机那个界面。

/*****************************************************************************************************/
声明:本博内容均由http://blog.csdn.net/sundesheng125原创,转载请注明出处,谢谢!

/*****************************************************************************************************/

      

       用shell命令,eng版本能完成重新启动的代码如下:

String cmd = "su -c reboot";
exeShell(cmd);

   public void exeShell(String cmd){         
           
            try{  
                 Process p = Runtime.getRuntime().exec(cmd);  
                 BufferedReader in = new BufferedReader(  
                                     new InputStreamReader(  
                               p.getInputStream()));   
                 String line = null;    
                 while ((line = in.readLine()) != null) {    
                    Log.i("exeShell",line);                    
                 }    
                   
            }  
            catch(Throwable t)  
             {  
                  t.printStackTrace();  
             }  
             
}

       提示的错误是权限问题,但是代码是一样的,manifest里面也给了REBOOT权限,在网上找了一下解释还是没有什么好的解决方案,错误信息如下:

01-01 08:05:26.319 W/System.err(  776): java.io.IOException: Error running exec(). Command: [su, -c, reboot] Working Directory: null Environment: null
01-01 08:05:26.319 W/System.err(  776): 	at java.lang.ProcessManager.exec(ProcessManager.java:211)
01-01 08:05:26.319 W/System.err(  776): 	at java.lang.Runtime.exec(Runtime.java:168)
01-01 08:05:26.319 W/System.err(  776): 	at java.lang.Runtime.exec(Runtime.java:241)
01-01 08:05:26.319 W/System.err(  776): 	at java.lang.Runtime.exec(Runtime.java:184)
01-01 08:05:26.319 W/System.err(  776): 	at com.android.settings.DevelopmentSettings.exeShell(DevelopmentSettings.java:591)
01-01 08:05:26.319 W/System.err(  776): 	at com.android.settings.DevelopmentSettings.onPreferenceChange(DevelopmentSettings.java:580)
01-01 08:05:26.319 W/System.err(  776): 	at android.preference.Preference.callChangeListener(Preference.java:885)
01-01 08:05:26.319 W/System.err(  776): 	at android.preference.ListPreference.onDialogClosed(ListPreference.java:265)
01-01 08:05:26.329 W/System.err(  776): 	at android.preference.DialogPreference.onDismiss(DialogPreference.java:381)
01-01 08:05:26.329 W/System.err(  776): 	at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1235)
01-01 08:05:26.329 W/System.err(  776): 	at android.os.Handler.dispatchMessage(Handler.java:99)
01-01 08:05:26.329 W/System.err(  776): 	at android.os.Looper.loop(Looper.java:137)
01-01 08:05:26.329 W/System.err(  776): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
01-01 08:05:26.329 W/System.err(  776): 	at java.lang.reflect.Method.invokeNative(Native Method)
01-01 08:05:26.329 W/System.err(  776): 	at java.lang.reflect.Method.invoke(Method.java:511)
01-01 08:05:26.329 W/System.err(  776): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-01 08:05:26.329 W/System.err(  776): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-01 08:05:26.329 W/System.err(  776): 	at dalvik.system.NativeStart.main(Native Method)
01-01 08:05:26.329 W/System.err(  776): Caused by: java.io.IOException: Permission denied
01-01 08:05:26.329 W/System.err(  776): 	at java.lang.ProcessManager.exec(Native Method)
01-01 08:05:26.339 W/System.err(  776): 	at java.lang.ProcessManager.exec(ProcessManager.java:209)
01-01 08:05:26.339 W/System.err(  776): 	... 17 more
01-01 08:05:26.369 W/InputManagerService(  174): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4138ecb8

    

      另外网上还有一种做法,代码如下:

Intent i = new Intent(Intent.ACTION_REBOOT);

  i.putExtra("nowait", 1);
  i.putExtra("interval", 1);
  i.putExtra("window", 0);
  sendBroadcast(i);


     不过这种要做签名,比较麻烦,笔者没有试过。

 

       笔者后面又在framework下面找了一下相关功能得代码,在

./frameworks/base/tests/DumpRenderTree2/src/com/android/dumprendertree2/ManagerService.java文件中有一个新的方法,模仿这个方法,笔者完成了既能在eng版本,也能在user版本中完成重新启动的程序。具体代码如下:

  Intent iReboot = new Intent(Intent.ACTION_REBOOT);      
                iReboot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(iReboot);               

 

<>、关机功能:

        关机功能相对来说更容易些,应该不够android的手机还是平板,长按电源都会弹出一个关机的对话框,模仿一下相应的代码就可以实现,在framework下面也有一个shutdown的一块处理模块。关机的具体代码如下:

                Intent shutdown = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);

                shutdown.putExtra(Intent.EXTRA_KEY_CONFIRM, false);

                shutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                mContext.startActivity(shutdown);

 

<>、关于context

    笔者的关机或重启功能是在setting--》【开发人员选项】里面增加了一项【关闭车载平板电脑】,在DevelopmentSettings.java中,这里面不是普通的activitie,是一个PreferenceFragment,所以要得到context,需要使用如下方法:

        mContext = getActivity();

      不能使用getContext()viewgetContext的方法,fragmentgetActivity的方法,activity就是context的子类,context不一定是activity,但是activity一定是context,总之,程序一定要找到上下文,否则intent什么的,都不可以操作。

 

         一些功能得开发,很多能在android源码里找到类似功能得代码,在framework下面有一下test代码,也很有用,搜索一下总能找到一些解决办法。


 

 

目录
相关文章
|
6月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
12月前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
261 4
Android开发表情emoji功能开发
|
12月前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
377 3
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
1403 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
133 0
|
Android开发
Android中如何快速的实现RecycleView的拖动重排序功能
使用`ItemTouchHelper`和自定义`Callback`,在`RecyclerView`中实现拖动排序功能。定义`ItemTouchHelperAdapter`接口,`Adapter`实现它以处理`onItemMove`方法。`SimpleItemTouchHelperCallback`设置拖动标志,如`LEFT`或`RIGHT`(水平拖动),并绑定到`RecyclerView`以启用拖动。完成这些步骤后,即可实现拖放排序。关注公众号“AntDream”获取更多内容。
282 3
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
414 2
|
移动开发 监控 Android开发
构建高效Android应用:从内存优化到电池寿命代码之美:从功能实现到艺术创作
【5月更文挑战第28天】 在移动开发领域,特别是针对Android系统,性能优化始终是关键议题之一。本文深入探讨了如何通过细致的内存管理和电池使用策略,提升Android应用的运行效率和用户体验。文章不仅涵盖了现代Android设备上常见的内存泄漏问题,还提出了有效的解决方案,包括代码级优化和使用工具进行诊断。同时,文中也详细阐述了如何通过减少不必要的后台服务、合理管理设备唤醒锁以及优化网络调用等手段延长应用的电池续航时间。这些方法和技术旨在帮助开发者构建更加健壮、高效的Android应用程序。
|
存储 数据库 Android开发
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
531 0

热门文章

最新文章