Android的AlarmManager Javadoc说明
When an alarm goes off, the Intent that had been registered for it is broadcast by the system,
AlarmServiceAndroid提供的API演示中有一个(包com.example.android.apis.app),它演示了正在使用的AlarmService.
在其中我们有以下内容(为清晰起见编辑):
PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this,
0, new Intent(AlarmService.this, AlarmService_Service.class), 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender);
Run Code Online (Sandbox Code Playgroud)
因此,在这个例子中,它不会执行,PendingIntent mAlarmSender = PendingIntent.getBroadcast(...);而是执行getServiceJavadoc从未提及的内容.
我问这个的原因是因为CPU唤醒锁的影响.Javadoc表示,一旦广播接收器onReceive()返回,AlarmManger的唤醒锁将被释放.
我想知道的是,如果您使用示例中的警报,唤醒锁定的含义是什么?Javadoc似乎没有解决这个问题.如果有什么似乎暗示你必须在设置警报时使用广播技术.
我做了一个应用程序,将手机变成网络摄像头,并使用手机连接将图像发送到互联网网络空间.
我正在使用广告活动,将警报管理器设置为每隔5或15分钟执行一次服务.要执行服务的整个执行,我会执行唤醒锁定,但在服务完成时会丢失.
所有这一切都适用于移动连接,但不同于wifi.
我已经设置wifi选项的政策"永远不会"为wifi睡眠.但过了一段时间(并不总是一样),手机似乎进入省电模式:wifi图标尚未处于状态栏,但手机无法连接.即使我使用浏览器...所以我必须断开连接并手动重新连接.logcat中的消息:notify conn break (IOEx), close connection
即使电话插上电源!!!
为什么?(1)
尝试使用由启动服务的活动形成的另一个应用程序,该服务始终使用唤醒锁定运行.所以我已经添加了wifi锁以确保连接,但是这种方法有时会运行而另一些则没有.总是一样的notify conn break (IOEx), close connection原因?(2)
最后一个实验是从第一个应用程序(警报管理器)派生出来的,并确保wifi不会进入睡眠/省电模式(女巫一个?)我已经在执行代码后将手机转为飞行模式当循环开始时我将其关闭(连接).这项工作可以使用两天,但有时它只能工作(每隔一小时或两小时,而不是每5分钟,或有时一整天都不工作,然后无任何理由重启......).那么,为什么飞机模式有时不会重新建立先前的无线连接?(还有一些时候呢?)(3)
这款手机是原装2.2的三星Galaxy ACE,总是可以充电.
我尝试开发使用手机加速度计的Android应用程序.它可以在除华为手机之外的任何地方工作(在P9上测试).我选中了"继续使用黑屏运行"选项并使用省电模式保护应用程序(电池选项).
我看不到解决方案,所以我问你:-)这是我的活动:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private MyService mService;
private boolean mIsRunning;
private MyService.ICallback mCallback = new MyService.ICallback() {
public void changed() {
Log.i(TAG, "CHANGED");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
super.onResume();
if(!mIsRunning) {
startStepService();
}
bindStepService();
}
@Override
protected void onPause() {
super.onPause();
if(mIsRunning && mService != null) {
unbindStepService();
}
}
private ServiceConnection mConnection = new ServiceConnection() {
public …Run Code Online (Sandbox Code Playgroud) Nexus系列的几款Android设备都有一个磁性传感器,它不能android.hardware.Sensor.TYPE_MAGNETIC_FIELD专门用于使用内置小磁铁的手机壳自动打开/关闭屏幕.
在我的应用程序中,我正在使用磁铁检测,android.hardware.Sensor.TYPE_MAGNETIC_FIELD并SensorManager检测用户触摸手机内部有一些磁铁的情况.
代码工作没有问题,问题是在这些设备上非常容易意外触发屏幕ON/OFF传感器,关闭屏幕.
我试过了:
android:keepScreenOn="true" 关于XMLandroid.permission.WAKE_LOCK并通过获取唤醒锁定PowerManager.两者都没有成功.
我的活动恢复时有没有办法暂时禁用此传感器?
如此处所述,WakefulBroadcastReceiver不推荐使用通常的类.
因此,现在无法创建像以前的SDK版本那样的计划任务.谷歌说,我必须使用
https://developer.android.com/reference/android/app/job/JobScheduler.html
但是怎么样?
那么,现在背景计划任务最有用的解决方案是什么?
AlarmManager不再有用吗?
我的应用程序每天唤醒几次并使用AlarmManager更新通知.我不确定我要改变什么.我要实施什么?旧API和新API?或者只是最新的解决方案?
您好我正在尝试使用服务来控制唤醒锁,以便我可以在应用程序运行时永久保持屏幕不亮.我创建唤醒锁并在onCreate()中激活它并在onDestroy()中释放它但是我得到错误"wl无法解析".谁能解释我怎么能克服这个?代码如下:
public class WakeLockService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");
wl.acquire();
}
@Override
public void onDestroy() {
wl.release();
}
}
Run Code Online (Sandbox Code Playgroud) java android android-service android-wake-lock android-1.5-cupcake
在我的应用程序中,在主要活动的onCreate()方法中,我正在创建唤醒锁定,以便在手机进入待机/屏幕关闭时CPU将继续运行.
同样在onCreate方法中,我有意创建一个使用加速度计的服务.当应用程序打开并监控加速度计值时,此服务需要持续运行(我知道这对电池不利,但我需要它来做).这是我目前的代码,服务开始很好.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Howaya");
wl.acquire();
if (appStart == true)
{
Intent AccelService = new Intent(this, Accelerometer.class);
AccelService.putExtra("unreg", false);
startService(AccelService);
}
appStart = false;
}
Run Code Online (Sandbox Code Playgroud)
我的清单中设置了以下权限 -
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)
我尝试过不同的锁 - 昏暗的屏幕和全亮度也无济于事.我在logcat上的输出在这里 -
F/PowerManager(15628): android.util.Log$TerribleFailure: WakeLock finalized while still held: Howaya
F/PowerManager(15628): at android.util.Log.wtf(Log.java:260)
F/PowerManager(15628): at android.util.Log.wtf(Log.java:239)
F/PowerManager(15628): at android.os.PowerManager$WakeLock.finalize(PowerManager.java:329)
F/PowerManager(15628): at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)
我见过有人说部分唤醒锁没有像他们应该做的那样工作,比如这个链接谷歌待机错误页面,但这个是去年发布和关闭所以我不知道是这样的,请问有人可以帮忙吗?关于最后一点我也有HTC Desire,谢谢.
我有一个媒体播放器,只要用户关闭应用程序就停止播放,可以通过按主页按钮,使用后退按钮或只是打开另一个应用程序.为了得到这种行为,我onStop()在我的主要活动中添加了一个告诉我MediaPlayer(在服务中)停止播放音乐的活动.
但是,我希望音乐在屏幕变暗时继续播放,无论是使用电源按钮关闭屏幕,还是仅通过屏幕自动调光.
现在,当屏幕变暗时,播放器也会停止播放,这意味着onStop()方法也会被调用.
如何检查onStop()是否被屏幕调用调用?
我已经PARTIAL_WAKELOCK在我的MediaPlayer对象上应用了一个,据我所知,应该可以让玩家在屏幕关闭后继续运行.
我是否还需要在主要活动中添加部分唤醒锁?
刚刚应用了PARTIAL_WAKELOCK我的主要活动,以及我的媒体播放器.此时,屏幕不再自动关闭,当用户按下电源按钮时,音乐仍然停止.
显然,这不符合我的想法.
有没有办法实现我正在寻找的行为?
我希望当我的应用程序运行电源按钮时(按下锁定屏幕和屏幕变黑),应该禁用.这样用户就无法锁定屏幕.
我在三星Galaxy S手机的默认相机应用程序中注意到了这一点.这与我试图做同样的事情是一样的.我还有一个相机相关的应用程序.
我编写了一种方法来禁用Android锁定屏幕,并使屏幕从待机状态(用于拨号)打开。此方法可正常工作30秒,但随后会触发待机屏幕,该屏幕短暂闪烁。这会触发onPause,onStop,onResume。这不应该发生。哪个标志不正确?实施必须从最新的Android版本开始,直到API 19。
此错误仅在<8.0以下的Android设备上发生。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
disableLockScreen(this)
setContentView(R.layout.activity_main)
Log.i("AppLifecycleTest", "onCreate")
}
override fun onResume() {
super.onResume()
Log.i("AppLifecycleTest", "onResume")
}
override fun onPause() {
super.onPause()
Log.i("AppLifecycleTest", "onPause")
}
override fun onStop() {
super.onStop()
Log.i("AppLifecycleTest", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.i("AppLifecycleTest", "onDestroy")
}
@Suppress("DEPRECATION")
private fun disableLockScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
activity.setShowWhenLocked(true)
activity.setTurnScreenOn(true)
}
val lock =
(activity.getSystemService(Activity.KEYGUARD_SERVICE) as KeyguardManager).newKeyguardLock(Context.KEYGUARD_SERVICE)
val powerManager = activity.getSystemService(Context.POWER_SERVICE) as PowerManager
val wake = powerManager.newWakeLock(
PowerManager.FULL_WAKE_LOCK or
PowerManager.ACQUIRE_CAUSES_WAKEUP or …Run Code Online (Sandbox Code Playgroud) android ×10
alarmmanager ×1
huawei ×1
java ×1
kill ×1
kotlin ×1
media-player ×1
standby ×1
wakelock ×1
wifi ×1
wifimanager ×1