当前位置:首页 » 安卓系统 » android屏保

android屏保

发布时间: 2022-01-08 23:52:56

1. Android底层是否支持屏保状态的触发通知

有一部分三星的手机关闭屏幕以后,刚打开屏幕,前台的activity就会resume状态,因为我们使用cocos2d-x引擎,默认resume和activity的resume事件是一致的,我们在resume里把关闭的声音重新打开,所以导致,用户点亮屏幕以后(尚未解锁),就会听到游戏内的声音(如果在关闭屏幕时我们游戏处于前台)。

为了解决这个问题,我们需要修改我们resume触发的时机。确保在解锁以后才进入我们游戏的resume状态。
那么我们游戏应该在什么时机进入resume状态呢?
系统activity进入resume状态时刻,并且屏幕是亮的,屏幕未锁定
屏幕刚刚亮起,并且屏幕 未锁定,系统activity已经进入resume状态
屏幕 解锁,这是屏幕肯定是亮的,并且activity已经进入resume状态
那么有了上面的三点相信逻辑代码不难写,下面介绍一下如何坚挺系统屏幕灭,屏幕亮,解锁屏幕 的事件,以及如何判断当前屏幕 是否是解锁状态(因为用户可以设置关闭屏幕后是否锁定屏幕 ,所以解锁屏幕 事件可能根本就不会被触发,那么我们就不能通过跟踪事件来确定其状态)
要坚挺屏幕亮、屏幕灭、屏幕 解锁三个事件我们需要在代码中注册监听ACTION_SCREEN_ON、ACTION_SCREEN_OFF、ACTION_USER_PRESENT三个Action,具体的写法如下:
[java] view plain
/**
* screen状态广播接收者
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_SCREEN_ON.equals(intent.getAction())){
mScreenStateListener.onScreenOn();
}else if(Intent.ACTION_SCREEN_OFF.equals(intent.getAction())){
mScreenStateListener.onScreenOff();
}else if(Intent.ACTION_USER_PRESENT.equals(intent.getAction())){
mScreenStateListener.onUserPresent();
}
}
}
[java] view plain
/**
* 停止screen状态更新
*/
public void stopScreenStateUpdate() {
mContext.unregisterReceiver(mScreenReceiver);
}

/**
* 启动screen状态广播接收器
*/
private void startScreenBroadcastReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}

因为屏幕在灭了以后是否锁定可以由用户设置,所以我们不能通过跟踪解锁事件来判断其状态,需要一个可以时时获取状态的函数:
[java] view plain
//判断屏幕是否被锁定
public final static boolean isScreenLocked(Context c) {
android.app.KeyguardManager mKeyguardManager = (KeyguardManager) c.getSystemService(c.KEYGUARD_SERVICE);
return mKeyguardManager.inKeyguardRestrictedInputMode();
}
需要注意的是,大部分事件都可以在AndroidManifest.xml中注册,但是ACTION_SCREEN_ON、ACTION_SCREEN_OFF、ACTION_USER_PRESENT这几个事件在PowerManager那边做了限制,必须像上面那样在代码中注册,才能监听到,所以大家不要踩到坑哦~~~

下面是包装屏幕事件的一个类代码,仅供参考:
[java] view plain
package com.example.myfirstapp;

import java.lang.reflect.Method;

import android.app.Activity;
import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
import android.util.Log;

/**
* 监听屏幕ON和OFF PRESENT状态
*
* @author
* @2014
*
*/
public class ScreenObserver {
private static String TAG = "ScreenObserver";
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;
private static Method mReflectScreenState;

public ScreenObserver(Context context) {
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
try {
mReflectScreenState = PowerManager.class.getMethod("isScreenOn",
new Class[] {});
} catch (Exception nsme) {
Log.d(TAG, "API < 7," + nsme);
}
}

/**
* screen状态广播接收者
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) {
mScreenStateListener.onScreenOn();
} else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
mScreenStateListener.onScreenOff();
} else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
mScreenStateListener.onUserPresent();
}
}
}

/**
* 请求screen状态更新
*/
public void requestScreenStateUpdate(ScreenStateListener listener) {
mScreenStateListener = listener;
startScreenBroadcastReceiver();
firstGetScreenState();
}

/**
* 第一次请求screen状态
*/
private void firstGetScreenState() {
PowerManager manager = (PowerManager) mContext
.getSystemService(Activity.POWER_SERVICE);
if (isScreenOn(manager)) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}

/**
* 停止screen状态更新
*/
public void stopScreenStateUpdate() {
mContext.unregisterReceiver(mScreenReceiver);
}

/**
* 启动screen状态广播接收器
*/
private void startScreenBroadcastReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
mContext.registerReceiver(mScreenReceiver, filter);
}

/**
* screen是否打开状态
*/
private static boolean isScreenOn(PowerManager pm) {
boolean screenState;
try {
screenState = (Boolean) mReflectScreenState.invoke(pm);
} catch (Exception e) {
screenState = false;
}
return screenState;
}

// 外部调用接口
public interface ScreenStateListener {
public void onScreenOn();

public void onScreenOff();

public void onUserPresent();
}

public final static boolean isScreenLocked(Context c) {
android.app.KeyguardManager mKeyguardManager = (KeyguardManager) c
.getSystemService(c.KEYGUARD_SERVICE);
return mKeyguardManager.inKeyguardRestrictedInputMode();
}
}

2. 安卓系统如何取消系统自带的屏保

点击屏幕持续三秒!然后会弹出一个列表!选择壁纸就可以换其他的了!

3. 怎样打开安卓手机的动态屏保

打开安卓手机的动态屏保首先屏保用的就是动态屏保,不然没办法动。屏保一般下载好以后会提示,如果当时没有开启,在想打开动态屏保的步骤:
第一步、打开手机设置;
第二步、进入设置页面,选择主题和壁纸;
第三步、选择主题或者动态壁纸(主题包含屏保、壁纸等一个系列);
第四步、选择下载的动态壁纸;
第五步、动态壁纸设置完成。

4. 安卓系统的屏幕保护在哪里呀,我找不到求助

。。。首先!纠正你一下安卓系统是没有屏幕保护的!我想你是要找锁屏吧?如果你没安装锁屏软件是无法实现的!那么锁屏软件有了之后你就可以在里面设置了!这些基础的手机应用相信没什么问题吧

5. Android tv版开发代码中如何取消屏保

1、注册一个BroadcastReceiver,用于接收ACTION_SCREEN_OFF事件。当接收到这个事件时,打开自定义的屏保画面。以下代码为了测试方便,放在MainActivity.java中,也可以根据需要,把代码放入service中。
registerReceiver(mMasterResetReciever,newIntentFilter(Intent.ACTION_SCREEN_OFF)); BroadcastReceiver mMasterResetReciever=newBroadcastReceiver() { publicvoidonReceive(Context context, Intent intent){ try{ Intent i =newIntent(); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setClass(context, ScreenSaverActivity.class); context.startActivity(i); }catch(Exception e){ Log.i("Output:", e.toString()); } } };

2、完成这一步时,虽然屏幕关闭时,屏保画面被显示,但由于接收的是ACTION_SCREEN_OFF事件,所以屏幕已经变黑了,这个时候就需要强制点亮屏幕。
首先,在AndroidManifest.xml中加上permission 权限:
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>

以下代码在ScreenSaverActivity.onCreate中
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE); mWakeLock = pm.newWakeLock( PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"SimpleTimer");

然后在屏保画面显示时,点亮屏幕。在ScreenSaverActivity.onResume中加入
mWakeLock.acquire();

为了能够在退出屏保时,能够让屏幕可以关闭,我们必须释放WakeLock.故在ScreenSaverActivity.onPause中加入
mWakeLock.acquire();

注意,必须放在onResume中,如放在别的地方。会导致程序无法再次进入屏保,具体原因不详。由于手头只有一个手机,不能进行广泛的测试。
3. 完成第二步后,一般情况下大功告成。按键就可以返回程序。但有时候需要点击屏幕就返回系统。这个时候会发现,无论怎么样点击屏幕,系统都不会有响应,因为此时屏幕已经被锁定。因此,要实现这个功能,在打开屏保时,需要关键屏幕的锁定功能。
首先,在AndroidManifest.xml中加上permission 权限:
<uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD"/>

再次,把以下这段代码加入合适的地方。只要启动屏保时能够被调用到
KeyguardManager mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); KeyguardLock mKeyguardLock= mKeyguardManager.newKeyguardLock(TAG); mKeyguardLock.disableKeyguard();

当然也可以通过以下代码开启屏幕锁定功能。

6. 怎么把安卓屏保设置的和用的主题一样的图

主题设置,记住一点,所有设置都可以在主题或者这个软件设置里找到。

7. 安卓系统手机怎么设置屏保

1、首先打开手机主界面,然后选择点击“设置”选项,如下图所示。

8. 安卓系统自己改的手机屏保图片保存在哪个文件夹

在data里,手机是不可查看的

9. 安卓手机屏保在哪设置

进设置里面看呗!

10. 求安卓屏保软件!

时钟屏保可能会比较适合你吧,不过现在的软件那么多你可以下载其他的屏保软件
在应用宝上有很多很有爱的也不错啊
利用重力传感器控制小球运动,将小球送到指定洞中即可解锁屏幕,挺有意思的
碎屏屏保可以和你的朋友搞怪一下,吓一下他们
还有很多很漂酿的屏保app可以使用,给你的手机美化一下也是不错的
在应用宝上的软件选择性大,方便下载
还有很多下载应用获取礼包的活动会经常搞,喜欢的话可以关注一下

热点内容
番茄怎样存储长久 发布:2025-01-08 05:08:22 浏览:337
数据库笛卡尔积举例 发布:2025-01-08 05:08:21 浏览:397
长沙算法方案 发布:2025-01-08 05:01:33 浏览:95
android开发和ios开发 发布:2025-01-08 04:40:07 浏览:437
饥荒如何开启服务器模组 发布:2025-01-08 04:11:30 浏览:137
linuxsshroot登录 发布:2025-01-08 04:09:28 浏览:732
平多多如何取消免密码支付 发布:2025-01-08 04:06:21 浏览:551
excelvba编程宝典pdf 发布:2025-01-08 04:02:39 浏览:468
android学英语 发布:2025-01-08 04:01:51 浏览:792
中文字体linux 发布:2025-01-08 04:01:51 浏览:693