Android-系统签名,屏幕休眠与唤醒

1,020 阅读1分钟

Android实现对系统的休眠和唤醒操作

系统签名

为了能通过APP代码实现对Android系统的休眠和唤醒操作,需要添加系统签名

android:sharedUserId="android.uid.system"

休眠

fun goToSleep(): Boolean {
    val pm = getSystemService(POWER_SERVICE) as PowerManager
    try {
        val method: Method = pm.javaClass.getMethod("goToSleep", java.lang.Long.TYPE)
        method.invoke(pm, SystemClock.uptimeMillis())
        return true
    } catch (e: java.lang.Exception) {
        e.printStackTrace()
    }
    return false
}

唤醒

@SuppressLint("InvalidWakeLockTag")
fun wakeUp(){
    Log.d("唤醒","")
    val pm = getSystemService(POWER_SERVICE) as PowerManager
    val wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_DIM_WAKE_LOCK, "bright")
    wakeLock.acquire()
}

广播监听屏幕休眠和唤醒

AndroidManifest.xml

<receiver android:name="com.xx.boardcast.ScreenStatusReceiver">
    <intent-filter>
        <action android:name="android.intent.action.SCREEN_ON"></action>
        <action android:name="android.intent.action.SCREEN_OFF"></action>
    </intent-filter>
</receiver>

BroadcastReceiver

public class ScreenStatusReceiver extends BroadcastReceiver {
    String SCREEN_ON = "android.intent.action.SCREEN_ON";
    String SCREEN_OFF = "android.intent.action.SCREEN_OFF";

    @Override
    public void onReceive(Context context, Intent intent) {
        // 屏幕唤醒
        if(SCREEN_ON.equals(intent.getAction())){
            Log.e("屏幕唤醒", SCREEN_ON);
        }
        // 屏幕休眠
        else if(SCREEN_OFF.equals(intent.getAction())){
            Log.e("屏幕休眠-", SCREEN_OFF);

            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            @SuppressLint("InvalidWakeLockTag") PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
            wakeLock.acquire();

        }
    }
}

注册广播

// 屏幕状态广播
val screenStatusReceiver: ScreenStatusReceiver
// 屏幕状态广播初始化
screenStatusReceiver = ScreenStatusReceiver()
val screenStatusIF = IntentFilter()
screenStatusIF.addAction(Intent.ACTION_SCREEN_ON)
screenStatusIF.addAction(Intent.ACTION_SCREEN_OFF)
// 注册
registerReceiver(screenStatusReceiver, screenStatusIF)