- 新建Activity,并在activity的onCreate()方法中設(shè)置flags
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD //解鎖
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON //保持屏幕不息屏
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);//點(diǎn)亮屏幕
if (Build.VERSION.SDK_INT > 27) {
setShowWhenLocked(true);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
WindowManager.LayoutParams params = getWindow().getAttributes();
//低調(diào)模式, 會隱藏不重要的狀態(tài)欄圖標(biāo),https://blog.csdn.net/QQsongQQ/article/details/89312763
params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE;
getWindow().setAttributes(params);
setContentView(R.layout.activity_call);
}
- 在AndroidManifest.xml中配置activity,并加入鎖屏顯示權(quán)限
<activity android:name=".activity.YunXinCallInActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
- 啟動Activity
wakeUpAndUnlock(getApplicationContext());
startActivity(new Intent(getApplication(), YunXinCallInActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP));
public void wakeUpAndUnlock(Context context) {
//屏鎖管理器
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
//解鎖
kl.disableKeyguard();
//獲取電源管理器對象
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//獲取PowerManager.WakeLock對象,后面的參數(shù)|表示同時(shí)傳入兩個值,最后的是LogCat里用的Tag
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":bright");
//點(diǎn)亮屏幕
wl.acquire();
//釋放
wl.release();
}
注意:覆蓋鎖屏顯示這個功能在某些手機(jī)上需要“鎖屏顯示”權(quán)限,目前只能用戶自己開啟,無法通過代碼申請。
附上國內(nèi)各大廠商跳轉(zhuǎn)到權(quán)限的代碼
public class PermissionUtil {
/**
* Build.MANUFACTURER判斷各大手機(jī)廠商品牌
*/
private static final String MANUFACTURER_HUAWEI = "Huawei";//華為
private static final String MANUFACTURER_MEIZU = "Meizu";//魅族
private static final String MANUFACTURER_XIAOMI = "Xiaomi";//小米
private static final String MANUFACTURER_SONY = "Sony";//索尼
private static final String MANUFACTURER_OPPO = "OPPO";
private static final String MANUFACTURER_LG = "LG";
private static final String MANUFACTURER_VIVO = "vivo";
private static final String MANUFACTURER_SAMSUNG = "samsung";//三星
private static final String MANUFACTURER_LETV = "Letv";//樂視
private static final String MANUFACTURER_ZTE = "ZTE";//中興
private static final String MANUFACTURER_YULONG = "YuLong";//酷派
private static final String MANUFACTURER_LENOVO = "LENOVO";//聯(lián)想
public static boolean isAppSettingOpen = false;
public static final int PERMISSION_SETTING_FOR_RESULT = 0x100;
/**
* 跳轉(zhuǎn)到相應(yīng)品牌手機(jī)系統(tǒng)權(quán)限設(shè)置頁,如果跳轉(zhuǎn)不成功,則跳轉(zhuǎn)到應(yīng)用詳情頁
* 這里需要改造成返回true或者false,應(yīng)用詳情頁:true,應(yīng)用權(quán)限頁:false
*
* @param activity
*/
public static void GoToSetting(Activity activity) {
switch (Build.MANUFACTURER) {
case MANUFACTURER_HUAWEI://華為
Huawei(activity);
break;
case MANUFACTURER_MEIZU://魅族
Meizu(activity);
break;
case MANUFACTURER_XIAOMI://小米
Xiaomi(activity);
break;
case MANUFACTURER_SONY://索尼
Sony(activity);
break;
case MANUFACTURER_OPPO://oppo
OPPO(activity);
break;
case MANUFACTURER_LG://lg
LG(activity);
break;
case MANUFACTURER_LETV://樂視
Letv(activity);
break;
default://其他
try {//防止應(yīng)用詳情頁也找不到,捕獲異常后跳轉(zhuǎn)到設(shè)置,這里跳轉(zhuǎn)最好是兩級,太多用戶也會覺得麻煩,還不如不跳
openAppDetailSetting(activity);
} catch (Exception e) {
SystemConfig(activity);
}
break;
}
}
/**
* 華為跳轉(zhuǎn)權(quán)限設(shè)置頁
*
* @param activity
*/
public static void Huawei(Activity activity) {
try {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");
intent.setComponent(comp);
activity.startActivityForResult(intent, PERMISSION_SETTING_FOR_RESULT);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* 魅族跳轉(zhuǎn)權(quán)限設(shè)置頁,測試時(shí),點(diǎn)擊無反應(yīng),具體原因不明
*
* @param activity
*/
public static void Meizu(Activity activity) {
try {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
activity.startActivity(intent);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* 小米,功能正常
*
* @param activity
*/
public static void Xiaomi(Activity activity) {
try { // MIUI 8 9
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", activity.getPackageName());
activity.startActivityForResult(localIntent, PERMISSION_SETTING_FOR_RESULT);
isAppSettingOpen = false;
} catch (Exception e) {
try { // MIUI 5/6/7
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", activity.getPackageName());
activity.startActivityForResult(localIntent, PERMISSION_SETTING_FOR_RESULT);
isAppSettingOpen = false;
} catch (Exception e1) { // 否則跳轉(zhuǎn)到應(yīng)用詳情
openAppDetailSetting(activity);
}
}
}
/**
* 索尼,6.0以上的手機(jī)非常少,基本沒看見
*/
public static void Sony(Activity activity) {
try {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.sonymobile.cta", "com.sonymobile.cta.SomcCTAMainActivity");
intent.setComponent(comp);
activity.startActivity(intent);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* OPPO
* @param activity
*/
public static void OPPO(Activity activity) {
try {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.color.safecenter", "com.color.safecenter.permission.PermissionManagerActivity");
intent.setComponent(comp);
activity.startActivity(intent);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* LG經(jīng)過測試,正常使用
*
* @param activity
*/
public static void LG(Activity activity) {
try {
Intent intent = new Intent("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$AccessLockSummaryActivity");
intent.setComponent(comp);
activity.startActivity(intent);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* 樂視6.0以上很少,基本都可以忽略了,現(xiàn)在樂視手機(jī)不多
* @param activity
*/
public static void Letv(Activity activity) {
try {
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.PermissionAndApps");
intent.setComponent(comp);
activity.startActivity(intent);
isAppSettingOpen = false;
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* 只能打開到自帶安全軟件
* @param activity
*/
public static void _360(Activity activity) {
try {
Intent intent = new Intent("android.intent.action.MAIN");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
ComponentName comp = new ComponentName("com.qihoo360.mobilesafe", "com.qihoo360.mobilesafe.ui.index.AppEnterActivity");
intent.setComponent(comp);
activity.startActivity(intent);
} catch (Exception e) {
openAppDetailSetting(activity);
}
}
/**
* 系統(tǒng)設(shè)置界面
* @param activity
*/
public static void SystemConfig(Activity activity) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
activity.startActivity(intent);
}
/**
* 獲取應(yīng)用詳情頁面
* @return
*/
private static Intent getAppDetailSettingIntent(Activity activity) {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", activity.getPackageName(), null));
return localIntent;
}
public static void openAppDetailSetting(Activity activity) {
activity.startActivityForResult(getAppDetailSettingIntent(activity), PERMISSION_SETTING_FOR_RESULT);
isAppSettingOpen = true;
}
}