Android6.0以上實現斷電關機
阿新 • • 發佈:2019-02-11
尋尋覓覓,終於讓我找到了一種在安卓6.0以上可以用的關機方法,當然了,前提是手機必須root。因為我要實現的是斷電關機,所以首先得檢測電源事件。
一、監測電源事件:
1.建立Broad類
package com.slq.shutdownafterdisconnect; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.drm.DrmStore;/** * Created by 15265 on 2017/11/17. */ public class Broad { private BatteryStateListener mBatteryStateListener; private Context mContext; private BroadCast receiver; public Broad(Context context) { mContext = context; receiver = new BroadCast(); } public void register(BatteryStateListener listener) { mBatteryStateListener = listener; if (receiver != null) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); filter.addAction(Intent.ACTION_BATTERY_LOW); filter.addAction(Intent.ACTION_BATTERY_OKAY);filter.addAction(Intent.ACTION_POWER_CONNECTED); filter.addAction(Intent.ACTION_POWER_DISCONNECTED); mContext.registerReceiver(receiver, filter); } } public void unregister() { if (receiver != null) { mContext.unregisterReceiver(receiver); } } private class BroadCast extends BroadcastReceiver { String action=null; @Override public void onReceive(Context context, Intent intent) { if (intent!=null) { action=intent.getAction(); switch (action) { //接通電源 case Intent.ACTION_POWER_CONNECTED: if (mBatteryStateListener!=null) { mBatteryStateListener.onStatePowerConnected(); } break; //拔出電源 case Intent.ACTION_POWER_DISCONNECTED: if (mBatteryStateListener!=null) { mBatteryStateListener.onStatePowerDisconnected(); } //MyShutDown(); break; //電量低 case Intent.ACTION_BATTERY_LOW: break; //電量發生變化 case Intent.ACTION_BATTERY_CHANGED: break; //電量充滿 case Intent.ACTION_BATTERY_OKAY: break; } } } } //監聽介面 public interface BatteryStateListener { public void onStatePowerConnected(); public void onStatePowerDisconnected(); } }
二、在MainActivity編寫關機方法:
private void MyShutDown() { try { Process process=Runtime.getRuntime().exec("reboot -p"); String data=null; BufferedReader errorLine=new BufferedReader(new InputStreamReader(process.getErrorStream())); BufferedReader inputLine=new BufferedReader(new InputStreamReader(process.getInputStream())); String error=null; while ((error=errorLine.readLine())!=null&&!error.equals("null")) { data+=error+"\n"; } String input=null; while((input= inputLine.readLine())!=null&&!input.equals("null")) { data+=input+"\n"; } } catch (Exception e) { } }
三、在onCreate中呼叫
Broad listener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listener=new Broad(this); listener.register(new Broad.BatteryStateListener(){ @Override public void onStatePowerConnected() { Toast.makeText(MainActivity.this,"接通電源",Toast.LENGTH_LONG).show(); } @Override public void onStatePowerDisconnected() { Toast.makeText(MainActivity.this,"斷開電源",Toast.LENGTH_LONG).show(); MyShutDown(); } }); }
四、在onDestroy中登出
@Override protected void onDestroy() { if (listener!=null) { listener.unregister(); } super.onDestroy(); }