1

我的应用程序urban Airship用于其推送通知。

当用户"force" closes使用应用程序(通过在多任务窗口或设置中将其滑开)时,问题就开始了。当推送到达时,它会到达城市飞艇的接收器,并且它们正在广播我的应用程序使用的意图。所以,如果应用程序被强制关闭,那么我的接收器将不会被激活,我也无法接收到广播。

我知道Intent.FLAG_INCLUDE_STOPPED_PACKAGES 但我不能使用它,因为 urban 正在广播并且它在一个 jar 文件中。

解决方法可能是让我的应用程序始终处于运行状态,即使用户关闭它也是如此。我怎样才能做到这一点?我看到 What's app 正在这样做。还有其他解决方案吗?

PS我知道android的构建方式是,当用户强制关闭一个应用程序时,他“希望”它停用它的接收器,但推送通知不一样,推送通知仍然会通过。我只希望我的应用程序“活着”,这样我就可以收到推送。谢谢!

4

2 回答 2

1

服务在应用程序关闭时生效,尝试通过仅在服务内调用 service.stopSelf() 时停止的服务接收广播

于 2013-06-05T09:35:24.977 回答
0

您会希望您的服务返回 START_STICKY 标志

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

并且要在重新启动后持续存在,您必须创建并注册一个扩展广播接收器的接收器,该接收器在它的 onReceive 中启动您的服务。

在您的清单中添加权限:

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

注册接收方:

<receiver
    android:name=".MyBootReceiver"
    android:enabled="true"
    android:exported="false"
    android:label="MyBootReceiver" >
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <!-- Catch HTC FastBoot -->
    <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
于 2013-06-05T09:53:39.660 回答