【问题标题】:Android - running app in sleep, polling every N secondsAndroid - 在睡眠中运行应用程序,每 N 秒轮询一次
【发布时间】:2014-02-22 13:43:15
【问题描述】:

是否可以让 Android 应用在设备处于睡眠状态时继续运行,每 N 秒激活或轮询一次?

【问题讨论】:

  • 您可以将服务与警报管理器一起使用,而不是与电源管理器一起使用,这样会减少资源消耗。
  • 这个需要root吗?
  • 完全没有,它可以帮助开发人员。但是,在 API 级别 19 中应用所有这些时,请注意文档所说的内容。这可能会派上用场:stackoverflow.com/questions/21461191/…

标签: android


【解决方案1】:

您可以在应用处于睡眠状态或应用解锁时使用唤醒功能

在清单文件中使用它

< uses-permission android:name="android.permission.WAKE_LOCK" />
 < uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

在设备处于睡眠状态时继续运行

使用下面的代码

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
 wl.acquire();
   ..screen will stay on during this section..
 wl.release();

希望对你有帮助

【讨论】:

    【解决方案2】:

    是的,有办法做到这一点。您必须通过警报管理器简单地设置您的计划运行程序,以便在指定时间或经过时间之后运行您的应用程序。

       public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
    
         final public static String ONE_TIME = 'onetime';
    
         @Override
         public void onReceive(Context context, Intent intent) {
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 'YOUR TAG');
             //Acquire the lock
             wl.acquire();
              SetAlarm(context);
       //Release the lock
             wl.release();
         }
    
         public void SetAlarm(Context context)
            {
                AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
                intent.putExtra(ONE_TIME, Boolean.FALSE);
                PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
                //After after 5 seconds
                am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5 , pi); 
            }
    
        }
    

    记得在清单中添加你的接收器

    <receiver android:name='com.rakesh.alarmmanagerexample.AlarmManagerBroadcastReceiver'>
                </receiver>
    

    【讨论】:

    • 清单中还有其他需要设置的东西吗?这个需要root吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多