1. 程式人生 > >Android6.0以上實現斷電關機

Android6.0以上實現斷電關機

尋尋覓覓,終於讓我找到了一種在安卓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();
}