8

我的 GCM 服务有时会在我的智能手机的 RAM 被自动清除时关闭(如果您需要更多详细信息,请阅读此内容)。

据我了解,如果我将服务设置为在前台运行,它应该有助于系统使用 RAM 删除它。的方法Service.class onStartCommand()通常用于运行startForeground()方法。

但是对于最新版本的 GCM 实现,这是不可能的,因为onStartCommand()父方法GCMListenerService.class被定义为final,我无法覆盖它。

那么如何将我的 gcm 接收器设置为前台朗姆酒呢?

这是我关于 GCM 的清单部分。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.app.path" >    

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

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
 <!-- ... other permissions -->

<permission
    android:name="my.app.path.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="my.app.path.permission.C2D_MESSAGE" />

<application
    ...>
     <!-- ... activites... -->

    <receiver
        android:name="com.google.android.gms.gcm.GcmReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="my.app.path" />
        </intent-filter>
    </receiver>      

    <service
        android:name=".MyGcmListener"
        android:exported="false"
        android:enabled="true" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>

</application>

</manifest>

先感谢您。

4

1 回答 1

0

这个问题已经很老了,但我认为为了未来读者的利益,值得回答。

使用 GCM(或新的 FCM)无需将 GCMListenerService 保持在前台。
事实上,根本不需要让应用程序保持运行。

当系统收到 GCM 消息时,将启动您的应用并执行相关服务(GCM 中的 GCMListenerService 或 FCM 中的 FirebaseMessagingService)。

这篇文章提出的真正问题是:
当应用程序未运行时,GCM 消息不会到达。

这是由于小米阻止 GCM 消息的特殊功能。
请参阅:安全部分中的自动启动白名单。
http://en.miui.com/thread-117992-1-1.html

于 2016-09-10T18:43:59.727 回答