我一直在寻找最后的日子,所提问题的答案都没有帮助我,而且我正在用一些可能很容易解决的东西碰到我的脑袋......我想和接近传感器和我正在做的是,如果我把手指放在传感器上,它会关闭屏幕,如果我将手指移开,它会转回屏幕!我成功地关闭了屏幕,我得到了“Log.i(”信息“,”试图打开!“)”当我移开手指但是屏幕无法打开时的消息......我已经尝试过wakelock(评论)和没有成功的旗帜!如果我取下手指,键盘上的指示灯会亮,但屏幕不会亮。如果我按两次电源按钮,它会成功打开屏幕!谁能帮我一个忙吗? :(
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType()==Sensor.TYPE_PROXIMITY){
ProximityReading.setText("\nProximity Sensor Reading:" + String.valueOf(event.values[0]));
}
if(event.values[0] == 0) {
WindowManager.LayoutParams params = getWindow().getAttributes();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
params.screenBrightness = 0f;
getWindow().setAttributes(params);
} else {
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 1f;
getWindow().setAttributes(params);
/*powermanager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powermanager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
wakeLock.acquire();
Log.i("info", "trying to turn on!");
}
}
答案 0 :(得分:0)
如果你想打开屏幕,你可以使用诸如" TurnScreenOn"等API。在PowerManager中,或使用ACQUIRE_CAUSES_WAKEUP结合FULL_WAKE_LOCK
答案 1 :(得分:0)
我使用以下方法解锁手机,将其点亮,然后重新启用键盘锁。
public void unlockAndPowerup(){
KeyguardManager km = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock");
kl.disableKeyguard();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();
wakeLock.release();
kl.reenableKeyguard();
}
答案 2 :(得分:0)
你的程序错了。它可能偶然在某些设备上运行,但这不是它的方法。
FLAG_TURN_SCREEN_ON 应该应用于活动的onCreate方法。您需要修改您的应用逻辑。
您的屏幕关闭技术不正确。您正在修改亮度,这是一种愚蠢的方式,并且可能根本不关闭屏幕,并且耗尽电池电量。 您需要通过“设备管理员”权限来实现它。这是正式的做法
锁定示例代码
public static void lockNow(Context c) {
DevicePolicyManager dpm = (DevicePolicyManager)c.getSystemService(Context.DEVICE_POLICY_SERVICE);
if(dpm.isAdminActive(new ComponentName(c.getApplicationContext(),DeviceAdmin.class)))
dpm.lockNow();
}
DeviceAdmin.java
import android.app.admin.DeviceAdminReceiver;
public class DeviceAdmin extends DeviceAdminReceiver {
}
在清单
中<receiver
android:name=".admin.DeviceAdmin"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
并要求设备管理员权限
private void askAdminPerm(){
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
new ComponentName(root.getContext(), DeviceAdmin.class));
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, getString(R.string.lock_msg_big));
startActivity(intent);
}