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

  [java] view plaincopyprint?

  Intent i = new Intent(Intent.ACTION_REBOOT);

  i.putExtra("nowait", 1);

  i.putExtra("interval", 1);

  i.putExtra("window", 0);

  sendBroadcast(i);

  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版本中完成重新启动的程序。具体代码如下:

  [java] view plaincopyprint?

  Intent iReboot = new Intent(Intent.ACTION_REBOOT);

  iReboot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  mContext.startActivity(iReboot);

  Intent iReboot = new Intent(Intent.ACTION_REBOOT);

  iReboot.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  mContext.startActivity(iReboot);

  <二>、关机功能:

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

  [java] view plaincopyprint?

  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);

  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();view有getContext的方法,fragment有getActivity的方法,activity是context的子类,context不一定是activity,但是activity一定是context,总之,程序一定要找到上下文,否则intent什么的,都不可以操作。

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