Unity 实现Android不锁屏
来源:互联网 发布:火石软件招聘 编辑:程序博客网 时间:2024/05/16 12:19
本文来自: http://stackoverflow.com/questions/19846822/unity3d-android-lockscreen-not-shown-when-screen-times-out-wakelock
我建一个 android 应用程序使用统一,它是很好。但是,我遇到一个奇怪问题有关屏幕超时和锁屏界面不显示。
应发生什么情况
- 用户停止播放
- 屏幕时间出去和曲折关闭
- 以后,玩家返回并重新打开他们的电话
- 锁屏界面显示,用户可以输入他们的密码,或否则解除锁定他们的电话
- 应用程序重新获得焦点并继续
发生了什么事情
- 用户停止播放
- 屏幕时间出去和曲折关闭
- 以后,玩家返回并重新打开他们的电话
- 锁屏界面并不显示 !这款应用程序是正确的焦点,都放在一起绕过锁屏界面
- 用户生气其安全性:(
备注
- 发生这种情况无论我使用 Android 插件
- 我使用的统一 4.2.0f4 (虽然为较新版本的改动) 有没有什么关于这一问题)
- 它甚至发生在一个空白的 Android 项目
- 5 不同的设备上测试过此,都有同样的问题
我怀疑这造成的团结不会放弃当屏幕超时 wakelock。这会导致应用程序持有的重点和锁屏界面从来没有获取 ' 加载 '。这是一个很严重的问题。
有谁知道的任何方式来解决此问题吗?
注: 我已经问过这个问题上统一的答案有点在一周前,还没有收到任何答复。我想也许我会有好运在这里。
解决方法 1:
我首先要感谢MichaelTaylor3D 的回答说我指向正确的方向。
有几个问题与他解决的问题,我觉得我已经更正的方法:
第一个问题是与 KeyguardManager
到锁定屏幕的方法。这贬值 API 版本 8 中,API 9+ 不会工作。新的解决方案使用设备管理 API 这似乎非常侵入性的游戏。
我通过 eclipse 中的 UnityPlayer 定义看,发现一个功能称为 setWakeLock(boolean),然而它是私有。
我做了一个自定义的 android 活动。在这,我访问受保护的 UnityPlayer 函数 setWakeLock(boolean)
和调用它 onPause
函数。
我承认这是不甚理想,但它似乎没有副作用的工作。我已经提交到统一的 bug 报告,所以希望这项工作大约不会要求为长。
public class UnityPlayerWithLockscreen extends UnityPlayerNativeActivity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
//Provides access to the private UnityPlayer.setWakeLock(boolean) method.
public void setWakeLock(boolean useWakelock) {
Method setWakeLockMethod;
//Use Reflection to get the setWakeLock(boolean) method from the UnityPlayer class
setWakeLockMethod = mUnityPlayer.getClass().getDeclaredMethod("setWakeLock");
//Set the method to me accessible
setWakeLockMethod.setAccessible(true);
//Invoke the method with our argument
setWakeLockMethod.invoke(mUnityPlayer, useWakelock);
}
@Override
protected void onPause()
{
super.onPause();
//Force unity to release the wakelock
setWakeLock(false);
}
}
然后您需要在 AndroidManifest 文件中设置这项活动作为主要活动:
<?xml version="1.0" encoding="utf-8"?>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".UnityPlayerWithLockscreen"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
此解决方案还不需要任何 C# 脚本或 C# <-> Java 互操作。
再次,我知道这是种一个出租司机的解决方案,但它似乎没有副作用 API 级别无关的几个设备上的工作。但愿这很快获取固定的统一,将不再需要丑陋的修复程序。
另外一篇文章:
手机不锁屏功能使用Android编辑器ADT其实是很容易实现的,但是Unity并没有提供现成的接口,但是可以调用Android接口,来辅助实现这个不锁屏的功能。
修改AndroidManifest.xml文件,添加<uses-permission android:name=“android.permission.WAKE_LOCK” />
01package com.test;0203import android.os.Bundle;04import android.view.WindowManager;0506import com.unity3d.player.UnityPlayerActivity;0708public class MainActivity extends UnityPlayerActivity {091011@Override
12protected void onCreate(Bundle savedInstanceState) {13super.onCreate(savedInstanceState);1415//不锁屏
16getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);17}
18}
- Unity 实现Android不锁屏
- unity实现android虚拟现实应用
- Unity Android 导入 Unity
- Android-Unity
- unity调用Android Api实现短信发送和震动功能
- Unity android客户端实现双击跳过动画播放
- Unity 实现简单的语音聊天 [Android版本]
- 【Unity】实现Android手机震动的sdk接口
- 自定义Mono,实现Unity Android平台代码更新
- 从零开始实现Unity与Android的交互(一)
- Unity和Android的交互——Toast实现
- unity 如何实现安卓Android的toast功能
- 【Unity开发】UNITY实现断点续传
- [Unity优化]Unity Android Profiler
- Unity 实现 AOP
- 使用Unity 实现 AOP
- Unity 实现多点触摸
- 使用Unity 实现 AOP
- 【NOIP2017提高组模拟12.10】幻魔皇
- ContentProvider
- Intent
- 将eclipse中的Android项目导入到Android Studio
- ListView
- Unity 实现Android不锁屏
- ListView优化
- 我的C语言
- Loader加载器
- python模块学习---urllib,urlparse(3.0以后有改动)
- 学期总结
- markdown 语法之字体、字号、颜色以及背景色(转载)
- Menu菜单
- 大数据Spark “蘑菇云”行动第96课:基于Hive对电商数据案例分析