标签: android-wake-lock

即使屏幕关闭也开始活动

我正在尝试通过闹钟开始一项活动。PendingIntent 启动接收器,接收器启动活动。我目前的问题是活动在后台开始,无法听到警报声。Oreo 和更新的设备不推荐使用旧 SO 问题中的大多数标志。有没有人有一个很好的方法来处理这个问题?

先感谢您

报警创建:

alarmManager.setExact(AlarmManager.RTC_WAKEUP, intervalFinished, pendingIntent)
Run Code Online (Sandbox Code Playgroud)

接收者

class OnAlarmReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        val intent = Intent(context, AlarmActivity::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

        context.startActivity(intent)
    }
}
Run Code Online (Sandbox Code Playgroud)

活动:

private var wake: PowerManager.WakeLock? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
    wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK
            or PowerManager.ACQUIRE_CAUSES_WAKEUP, "App:wakeuptag")
    wake?.acquire(10*60*1000L /*10 minutes*/)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        setShowWhenLocked(true)
        setTurnScreenOn(true)
    } else {
        window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)
    } …
Run Code Online (Sandbox Code Playgroud)

android alarm android-wake-lock

3
推荐指数
1
解决办法
2477
查看次数

在向GCM注册时,代码卡在获取唤醒锁定时

我正在使用GCM为我的项目提供推送通知,但我被困在获取唤醒锁定.

日志消息:

09-03 17:04:05.003: V/GCMBroadcastReceiver(5772): onReceive:com.google.android.c2dm.intent.REGISTRATION
09-03 17:04:05.003: V/GCMBroadcastReceiver(5772): GCM IntentService class: example.pro.GCMIntentService
09-03 17:04:05.049: V/GCMBaseIntentService(5772): Acquiring wakelock
Run Code Online (Sandbox Code Playgroud)

以下是我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.pro"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- Creates a custom permission so only this app can receive …
Run Code Online (Sandbox Code Playgroud)

android push-notification android-wake-lock google-cloud-messaging

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

唤醒锁释放不起作用

我必须制作一个使用唤醒锁保持屏幕打开的应用程序。我有两个按钮,一个用于打开唤醒锁,一个用于关闭它。

打开唤醒锁的按钮工作正常,但关闭唤醒锁的按钮会导致应用程序崩溃。

这是代码:

    public class MainActivity extends ActionBarActivity {


@Override @SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setupScreenONButton();

    setupScreenOFFButton();


}

@SuppressWarnings("deprecation")
private void setupScreenOFFButton() {

    Button ScreenOffButton = (Button) findViewById(R.id.buttonScreenOFF);

    ScreenOffButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"Screen OFF");
            wl.release();
            Toast.makeText(MainActivity.this, "Screen OFF", Toast.LENGTH_SHORT).show();

        }
    });


}

@SuppressWarnings("deprecation")
private void setupScreenONButton() {

    Button ScreenOnButton = (Button) findViewById(R.id.buttonScreenON);

    ScreenOnButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            PowerManager pm = …
Run Code Online (Sandbox Code Playgroud)

crash android button android-wake-lock wakelock

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

当我使用PowerManager.WakeLock与AlaramManager android时的权限异常

我正在开发一个原生的Android应用程序,每30分钟运行一次操作.我需要确保处理器正在运行,所以我使用了

警报接收器内的PowerManager.Wakelock.

这是我在警报接收器里面使用的代码.

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent arg1) {

        PowerManager pm = (PowerManager) context.getSystemService(context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
        wl.acquire();
        Intent eventService = new Intent(context, SyncInBackground.class);
        context.startService(eventService);
        wl.release();
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的主AndroidManifest.xml中

我添加了以下行来请求权限

<uses-permission android:name="android.permission.wake_lock"/>
Run Code Online (Sandbox Code Playgroud)

当我在我的应用程序中运行警报时,我得到以下异常

02-07 23:25:02.839  13699-13699/com.snappext E/AndroidRuntime? FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start receiver com.snappext.Backup.AlarmReceiver: java.lang.SecurityException: Neither user 10008 nor current process has android.permission.WAKE_LOCK.
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2140)
            at android.app.ActivityThread.access$1500(ActivityThread.java:127)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4512)
            at java.lang.reflect.Method.invokeNative(Native …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-wake-lock wakelock

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

Android,在应用程序的漏洞中,唤醒锁是否处于活动状态?

我的申请中有一些活动.在主要活动中,我定义了唤醒锁定:

PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
Run Code Online (Sandbox Code Playgroud)

并以onPause()方法发布.我的问题是,它在整个应用程序中是否活跃?或者我是否需要在每次活动中复制/粘贴它?

谢谢

android android-wake-lock android-activity

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

WakeLock并不总是发布

我最近重建了应用程序的电源管理部分以降低复杂性.其中的变化是重复使用唤醒锁; 具体而言,线程在创建时接收唤醒锁,然后根据需要获取/释放它直到被杀死.我发现这会导致唤醒锁release()被调用时并不总是释放.导致问题的代码在本质上是在这里给出的:

// Get the lock for the first time, acquire it, and do some work.
WakeLock wakelock = receiveFirstWakeLock();
wakelock.acquire();
doWork();

// When work is finished, release the lock. 
// Typically this lock is released very quickly.
wakelock.release();

// Re-acquiring the lock for the next bout of work always works.
wakelock.acquire();
doWork();

// In my full code, "wakelock" didn't appear to be releasing properly.
// I hypothesized that it might just be taking a little while 
// …
Run Code Online (Sandbox Code Playgroud)

java android android-wake-lock wakelock

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

Android - 确保在服务器的进程被操作系统杀死时释放Wakelock

FusedLocationProvider即使屏幕关闭,我也想让我为位置ping.为此,在我的服务中,我有一个PARTIAL_WAKE_LOCK,以保持CPU运行,并确保即使屏幕关闭,服务仍继续运行.

话虽如此,我知道Android OS会在需要内存时在后台扼杀服务/应用程序.因此,我的服务可以被杀掉.

发生这种情况时,onDestroy()Service不能保证被调用.如果是这种情况,我如何确保WakeLock被释放?

我打电话mWakeLock.acquire();onStartCommand,和onDestroy我打电话mWakeLock.release();

android android-service android-lifecycle android-wake-lock

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

关于WakefulBroadcastReceiver的困惑

我从这个链接一直在研究WakefulBroadcastReceiver:https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html

关于此,我几乎没有什么困惑:

  1. 即使设备处于睡眠模式,此接收器是否确保您将接收广播?(我认为不,它只是在收到广播之后保持设备唤醒,直到调用completeWakefulIntent()为止.)
  2. 该文档说明了在接收者中使用意图服务,并在完成工作后,调用了completeWakefulIntent.

代码:

import android.app.IntentService;
import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;

public class SimpleWakefulService extends IntentService {
    public SimpleWakefulService() {
        super("SimpleWakefulService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // At this point SimpleWakefulReceiver is still holding a wake lock
        // for us.  We can do whatever we need to here and then tell it that
        // it can release the wakelock.  This sample just does some slow work,
        // but more complicated implementations could take …
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver android-wake-lock

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

如何在多个活动中安全地实施WakeLock

我希望为我的应用程序的用户提供使用a保持屏幕的能力WakeLock.在我的主要活动中,我创建了以下函数:

protected void processWakeLock(int pauseResume) {
   switch (pauseResume) {
   case STATE_RESUME:
      if (mKeepScreenOn) {
         wakeLock.acquire();
      }
      break;
   case STATE_PAUSE:
      if (wakeLock.isHeld()) {
         wakeLock.release();
      }
      break;
   }
}
Run Code Online (Sandbox Code Playgroud)

我目前正在通过我的覆盖onPauseonResume覆盖来调用它,因为我希望确保在他们不主动使用我的应用程序时不会导致用户手机上的锁定.我的应用程序有3个其他全屏视图.什么是确保他们可以WakeLock继续使用我的应用程序的所有部分同时仍然对其余手机安全的最佳方法.

我的第一个想法是在我的每个活动中复制相同的代码片段,虽然这似乎是很多锅炉板.我无法使用onStart,onStop因为当我切换到另一个全屏幕活动时,可见性会丢失.虽然也许会更好

基于此处的图表和信息(http://developer.android.com/guide/topics/fundamentals.html),我没有看到更好的方法来应用锁定.

android android-wake-lock

0
推荐指数
1
解决办法
1108
查看次数

Wakelock参考计数

谁能解释一下这个PowerManager.Wakelock的方法是什么?

setReferenceCounted

"默认情况下,唤醒锁是参考计数." - 为什么?

android reference android-wake-lock wakelock

0
推荐指数
1
解决办法
2541
查看次数