Android 如何远程唤醒电话?

Android 如何远程唤醒电话?,android,xamarin.android,xamarin,android-wake-lock,Android,Xamarin.android,Xamarin,Android Wake Lock,我想构建一个需要通过3G远程启动的Android应用程序(在通过套接字获得推送通知后) 我做了一些研究,它似乎变得非常复杂,一旦屏幕关闭,也因为安卓杀死闲置插座 是否有一个示例项目演示了如何可靠地实现这一点?我找到了WakefulIntentService库,但它没有考虑套接字需要保持活动状态 另一种方法是定期轮询某个URL以获取唤醒信号,但这会在设备检测到需要启动应用程序之前引入很大的延迟,具体取决于轮询间隔。您是否查看或发送和接收推送 我不认为这些人容易被杀死 也就是说,如果您还没有,您应该

我想构建一个需要通过3G远程启动的Android应用程序(在通过套接字获得推送通知后)

我做了一些研究,它似乎变得非常复杂,一旦屏幕关闭,也因为安卓杀死闲置插座

是否有一个示例项目演示了如何可靠地实现这一点?我找到了WakefulIntentService库,但它没有考虑套接字需要保持活动状态

另一种方法是定期轮询某个URL以获取唤醒信号,但这会在设备检测到需要启动应用程序之前引入很大的延迟,具体取决于轮询间隔。

您是否查看或发送和接收推送

我不认为这些人容易被杀死

也就是说,如果您还没有,您应该让您的套接字在服务中运行。然后,它可以在后台运行,与活动无关,并且可以在设备启动时启动。此外,这将降低Android关闭它的可能性

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.release();

谢谢你的代码,但这有点像鸡蛋问题:我需要调用.aquire()来响应TCP数据包,唤醒手机并启动某个应用程序。但是,只要手机处于待机状态,我就永远不会收到数据包?我想我应该能够呼叫.aquire()以响应GCM消息,这将解决上面评论中的问题。感谢您将我指向GCM,这似乎正是我所寻找的,根据文档,即使屏幕关闭,传入的GCM消息也应到达。看起来很完美!很高兴能帮忙。我个人对parse.com的简单性很满意,他们为您运行服务器。使用GCM,您必须实现自己的服务器。此外,parse.com最近宣布他们也支持GCM(作为他们自己的通知推送通道的替代方案),但尚未对此进行调查。@Muis:服务不是完全可靠的。不知道那些库,但是你应该考虑一个小间隔的警报管理器来唤醒一个接收器,它代表清醒的意图。service@Mr_and_Mrs_D但是IntentService只是一个单一的服务,这个问题是关于保持套接字打开并运行的。我不相信你的建议适用于那种背景任务。他考虑过投票,所以我建议在androidhi@Muis中使用投票技术,你知道怎么做吗?我也想这样做,我发现一些手机处于休眠状态,无法立即接收Firebase推送通知,您是否匹配相同的问题?
WakeLocker.release();