2013-10-24 121 views
1

我在从GCM服务器获取通知消息时遇到问题。当设备闲置或处于运行状态但设备空闲10-15分钟时,设备将正确获取通知无法获取通知,并且所有注册的设备都无法从GCM服务器获取通知。如何解决此问题?Android GCM不向设备发送通知消息

回答

1

通常,您的应用需要在睡眠时唤醒。

  1. 将这个到您的清单文件即可唤醒设备时收到消息

    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    
  2. 添加Java类名WakeLocker.java

    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; 
        } 
    } 
    
  3. 调用上面的代码中'private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver()'可能在你的MainActivity.java中

    private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
        String newMessage = intent.getExtras().getString(EXTRA_MESSAGE); 
        // Waking up mobile if it is sleeping 
        WakeLocker.acquire(getApplicationContext()); 
    
        /** 
        * Take appropriate action on this message 
        * depending upon your app requirement 
        * For now i am just displaying it on the screen 
        * */ 
    
        // Showing received message 
        lblMessage.append(newMessage + "\n");   
        Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show(); 
    
        // Releasing wake lock 
        WakeLocker.release(); 
    } 
    }; 
    

    感谢This source

    希望这有助于

相关问题