相关疑难解决方法(0)

什么是Android上的"上下文"?

在Android编程中,究竟是什么Context类以及它用于什么?

我在开发者网站上看过它,但我无法理解它.

android android-context

1872
推荐指数
26
解决办法
65万
查看次数

如何找到屏幕被锁定在android中

对于我的应用程序,我需要知道屏幕已被锁定.如何检查这是有问题的.我使用了以下标志:

if(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON != 0){
    // some code
}else if((WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)!= 0){
   // some code
}
Run Code Online (Sandbox Code Playgroud)

但这总是执行if和else部分...我必须使用哪个标志来检查屏幕是否被锁定?

android

13
推荐指数
2
解决办法
3万
查看次数

锁定屏幕上的服务启动活动会打开屏幕,但不会显示活动本身

我正在尝试从已经获得锁定的服务开始活动,如下所示:

Intent i = new Intent(context, MyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

活动清单声明如下:

<activity
        android:name=".MyActivity"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|navigation"
        android:excludeFromRecents="true"
        android:launchMode="singleInstance"
        android:screenOrientation="nosensor"
        android:showOnLockScreen="true"
        android:taskAffinity=""
        android:theme="@style/MyTheme" />
Run Code Online (Sandbox Code Playgroud)

最后,on onCreate()或on onAttachedToWindow()(我试过两个),我添加以下标志:

final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

问题是我第一次startActivity()从我的服务中调用时,屏幕会亮起,但活动本身并没有显示出来.它显示锁定屏幕.每次后续调用startActivity()工作正常,但我找不到这种奇怪行为的原因.

我已经尝试过建议获取完整的唤醒锁而不是部分,根据以下SO答案更改清单中的标志和值:

请注意,我的主题不是对话框,而是全屏活动.

还有其他想法吗?

android android-activity

12
推荐指数
1
解决办法
1万
查看次数

Web应用程序使用Service Worker和推送通知获取后台地理位置

我正在寻找一种解决方案,以在移动浏览器中定期(每1分钟)获取地理位置。我进行了一些研究,得知在后台(当电话被锁定或Webapp未激活时)获取地理位置是不可能的。在前台工作正常。

我正在制作一个Web应用程序,在此我可以获取用户位置并将其发送到我的服务器。一切正常,直到用户锁定手机为止。我尝试了许多解决方法:

  • setInterval以获取地理位置,在前台工作正常,但在后台工作失败
  • 使用cordova将我的网络应用程序转换为Android,但是存在相同的问题
  • 使用https://github.com/mauron85/cordova-plugin-background-geolocation这个插件为Android
    • 在前景和背景方面都很好
    • 但同一个插件在iPhone中不起作用(我没有测试过,在继续之前我在Google中进行了搜索
    • 仅在一个平台(android)支持下发布我的应用程序是不好的,因此这种解决方法对我也失败了。
  • 我也考虑过将serviceworkers用于我的Web应用程序,但是对于背景https://github.com/w3c/ServiceWorker/issues/745似乎仍然存在问题

    我想到了另一个解决方案,但是在投入时间之前,我想知道是否有人已经尝试过了。

    我了解了推送通知:

    1. Web应用程序客户端注册到推送通知
    2. 它将订阅者对象发送到我的服务器
    3. 我的服务器使用此对象将消息发送到Push通知服务器
    4. 推送通知服务器将消息发送到我的Web应用程序客户端
    5. 我的Web应用程序客户端将我的服务工作者唤醒一小段时间以显示通知消息
    6. 根据谷歌文档:

      注意:在当前的Chrome浏览器实现中,每当我们收到推送消息并且在浏览器中看不到我们的网站时,我们都必须显示一条通知。也就是说,我们无法在用户不知情的情况下静默地进行操作。如果我们不显示通知,浏览器会自动创建一个通知,让用户知道该应用程序正在后台运行。

    在我的应用运行之前,我不介意向用户显示永久通知。我已经准备好进行权衡了。

    现在,我的问题是,在第5步,当我唤醒服务工作者**是否有可能我调用可能在后台运行的main.js(主Web应用)**时,它将获取地理位置并进行更新到我的服务器?

    是否有人已经成功或失败地尝试过此解决方案,请告知。

geolocation push-notification service-worker

5
推荐指数
1
解决办法
913
查看次数

Android 服务有办法检测设备何时锁定吗?

我有一个 Android 服务,我希望在设备锁定时执行操作。

我想澄清一下:

  • 我对屏幕开/关状态不感兴趣。
  • 我知道如何使用带有 Intent.ACTION_USER_PRESENT 和 KeyguardManager.inKeyguardRestrictedInputMode 的 BroadcastReceiver 来检查设备何时解锁。
  • 我对需要不断检查锁定状态的解决方案不感兴趣。
  • 我不想自己锁定或解锁设备。
  • 我不能依赖前台的 Activity 来处理 onResume。

我添加这些要点是因为我发现无数人提出同样的问题并得到其中之一的答复。我很高兴他们这样做了,因为答案是有用的和/或有教育意义的,但它们不是我现在正在寻找的。

android

4
推荐指数
1
解决办法
4247
查看次数

检查屏幕是否已解锁

如何检查屏幕是否已解锁(Ei打开而不是锁定屏幕)?

PS.我不是在寻找解锁事件,我知道可以使用AdminDeviceReceiver检索它,但我正在寻找一个可执行代码,它将返回一个布尔值,告诉我屏幕是否已解锁.

android

2
推荐指数
1
解决办法
6358
查看次数