老婆保佑,代碼無(wú)BUG
目錄
- 一:原理
- 二:實(shí)現(xiàn)
- 一像素的Act
- 廣播
- 清單文件注冊(cè)
- 透明主題
- 注冊(cè)廣播
一:原理
當(dāng)屏幕熄滅的時(shí)候呢项滑,鎖屏狀態(tài)依沮,調(diào)起一個(gè)一像素的Activity,為的還是能夠提高進(jìn)程的優(yōu)先級(jí)杖们,在上一篇文章中肩狂,有詳細(xì)的進(jìn)程優(yōu)先級(jí)的情況
二:實(shí)現(xiàn)
1. 一像素的Act
package com.cpsc.sanya.act;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
/**
* 描述:
* <p>
* <p>
* 一像素的ACT
*
* @author allens
* @date 2018/1/24
*/
public class OnePxActivity extends Activity {
private static final String TAG = "OnePx";
private BroadcastReceiver endReceiver;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate--->啟動(dòng)1像素闭辏活");
// 獲得activity的Window對(duì)象,設(shè)置其屬性
Window mWindow = getWindow();
mWindow.setGravity(Gravity.LEFT | Gravity.TOP);
WindowManager.LayoutParams attrParams = mWindow.getAttributes();
attrParams.x = 0;
attrParams.y = 0;
attrParams.height = 1;
attrParams.width = 1;
mWindow.setAttributes(attrParams);
//結(jié)束該頁(yè)面的廣播
endReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive--->finish");
finish();
}
};
registerReceiver(endReceiver, new IntentFilter("finish"));
checkScreen();
}
@Override
protected void onResume() {
super.onResume();
}
/**
* 檢查屏幕狀態(tài) isScreenOn為true 屏幕“亮”結(jié)束該Activity
*/
private void checkScreen() {
PowerManager pm = (PowerManager) OnePxActivity.this.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();
if (isScreenOn) {
finish();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(endReceiver);
}
}
2. 廣播
package com.cpsc.sanya.receiver;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.cpsc.sanya.act.OnePxActivity;
/**
* 描述:
* <p>
* <p>
* 廣播
*
* @author allens
* @date 2018/1/24
*/
public class OnePixelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//屏幕關(guān)閉啟動(dòng)1像素Activity
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.e("OnePx", "屏幕關(guān)閉啟動(dòng)1像素Activity");
Intent it = new Intent(context, OnePxActivity.class);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(it);
//屏幕打開(kāi) 結(jié)束1像素
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.e("OnePx", "屏幕打開(kāi) 結(jié)束1像素");
context.sendBroadcast(new Intent("finish"));
}
}
}
3. 清單文件注冊(cè)
<!-- 一像素 -->
<activity
android:name="com.cpsc.sanya.act.OnePxActivity"
android:configChanges="keyboardHidden|orientation|screenSize|navigation|keyboard"
android:excludeFromRecents="true"
android:finishOnTaskLaunch="false"
android:launchMode="singleInstance"
android:theme="@style/OnePxActStyle" />
4. 透明主題
<style name="OnePxActStyle">
<!-- 窗體背景顏色為透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 窗體沒(méi)有邊框 -->
<item name="android:windowFrame">@null</item>
<!-- 窗體不包含標(biāo)題欄 -->
<item name="android:windowNoTitle">true</item>
<!-- 窗體懸浮 -->
<item name="android:windowIsFloating">true</item>
<!-- 自定義TitleBar時(shí)去掉多余的陰影-->
<item name="android:windowContentOverlay">@null</item>
<!-- 不允許窗體背景變暗-->
<item name="android:backgroundDimEnabled">false</item>
<!-- 窗體切換無(wú)動(dòng)畫-->
<item name="android:windowAnimationStyle">@null</item>
<!-- 禁用窗口的預(yù)覽動(dòng)畫-->
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoDisplay">false</item>
</style>
5. 注冊(cè)廣播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(new OnePixelReceiver(), intentFilter);