我想构建一个需要通过3G远程启动的Android应用程序(通过套接字获取推送通知后)。
我做了一些研究,一旦屏幕关闭,它似乎变得非常复杂,也因为Android杀死了空闲套接字。
是否有一个示例项目演示如何可靠地实现它?我找到了WakefulIntentService库,但它没有考虑到套接字需要保持活动状态。
另一种方法是定期轮询某个URL以获取唤醒信号,但这会在设备检测到需要启动应用程序之前引入较大的延迟,具体取决于轮询间隔。
答案 0 :(得分:2)
我不认为那些容易被杀死。
话虽如此,如果你还没有,你应该让你的套接字在服务中运行。然后它可以在后台独立于活动的活动运行,并且可以在设备启动时启动。此外,这会降低Android关闭它的可能性。
答案 1 :(得分:0)
public abstract class WakeLocker {
private static PowerManager.WakeLock wakeLock;
public static void acquire(Context context) {
if (wakeLock != null) wakeLock.release();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE, "WakeLock");
wakeLock.acquire();
}
public static void release() {
if (wakeLock != null) wakeLock.release(); wakeLock = null;
}
}
在清单中添加以下行:
<uses-permission android:name="android.permission.WAKE_LOCK" />
当你想要醒来时使用:
WakeLocker.acquire(this);
完成通话后
WakeLocker.release();