【问题标题】:How to prevent android device from sleep while qt application is running如何在qt应用程序运行时防止android设备进入睡眠状态
【发布时间】:2014-04-16 14:15:03
【问题描述】:

我有一个在 qt 中开发的 android 幻灯片应用程序。一段时间后,设备会变暗,然后关闭并锁定。在用户退出应用程序之前,如何避免这种情况。

类似于“android.permission.WAKE_LOCK”并调用一些函数..我不确定。

【问题讨论】:

  • 要抑制系统节电机制,您需要使用系统特定的 API。 Qt 在这里没有提供任何帮助。
  • @Nejat:我听说我们通过添加 getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);在 QtActivity.java 上。我还知道 QtActivity.java 文件能够在 Qt5.1 中定位,而不是在 Qt5.2 中。我正在使用 Qt5.2。你对这些有什么想法吗?

标签: qt qt-necessitas


【解决方案1】:

你需要执行这段java代码:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

为此,请将此文件添加到您的项目中:

WakeLock.java:

package my.utl;

import org.qtproject.qt5.android.bindings.QtActivity;
import org.qtproject.qt5.android.bindings.QtApplication;
import java.lang.String;
import android.app.Activity;
import android.os.PowerManager;
import android.content.Context;

public class WakeLock
{
    private Activity myActivity;
    protected PowerManager.WakeLock m_WakeLock = null;

    public WakeLock(Activity a)
    {
        myActivity = a;
    }

    public int configure()
    {
        System.out.println("Inside WakeLock::configure");

        try
        {
            final PowerManager pm = (PowerManager) myActivity.getSystemService(Context.POWER_SERVICE);

            m_WakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
            // m_WakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
            // Does not work: https://stackoverflow.com/questions/5183859/partial-wake-lock-vs-screen-dim-wake-lock-in-download-thread
            m_WakeLock.acquire();

            return 42;
        }
        catch (Exception e)
        {
            System.out.println("WakeLock failed: " + e.toString());
        }

        return -1;
    }
}

然后,从您的应用程序中执行代码:

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");    //activity is valid
if ( activity.isValid() )
{
    QAndroidJniObject wakeLockObject("my/utl/WakeLock","(Landroid/app/Activity;)V",activity.object<jobject>());
    if ( wakeLockObject.isValid() )
    {
        jint res = wakeLockObject.callMethod<jint>("configure","()I");
        assert( res == 42 ); // check Java code was executed...
    }
    else
    {
        assert( false );
    }
}
else
{
    assert( false );
}

可能有一种方法可以在没有 java 文件的情况下执行此操作。我在做这个工作: Unable to call PowerManager.WakeLock.newWakeLock using QAndroidJniObject

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 2010-10-12
    • 2016-04-22
    • 2017-01-30
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多