【问题标题】:Push Notification not show in sleep mode睡眠模式下不显示推送通知
【发布时间】:2013-12-09 07:40:42
【问题描述】:

我在 GCMIntentService.java 中使用以下代码

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
    wl.acquire(15000);
    wl.acquire();

但推送通知不会在睡眠模式下显示。

当我解锁手机时推送通知工作正常,然后正确接收通知。

但我想在睡眠模式下显示通知,就像声音播放和接收来自 gmail 应用程序的通知一样。请帮助我该怎么做。

@Override
protected void onMessage(Context context, Intent intent) {
    Log.i(TAG, "Received message" + intent.getStringExtra("message"));
    String message = intent.getStringExtra("message");// getString(R.string.gcm_message);
    generateNotification(context, message);
}

private static void generateNotification(Context context, String message) {
    int icon = R.drawable.logo;
    long when = System.currentTimeMillis();


    NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notification = new Notification(icon, message, when);
    String title = context.getString(R.string.app_name);
    Intent notificationIntent = new Intent(context, Tabs.class);
    // set intent so it does not start a new activity
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

    notification.setLatestEventInfo(context, title, message, intent);

    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.flags |= Notification.FLAG_SHOW_LIGHTS;
    notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.sound);
    notification.defaults = Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE;


    notification.flags |= Notification.FLAG_SHOW_LIGHTS;
    //notification.defaults = Notification.DEFAULT_ALL;
    notificationManager.notify(0, notification);
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
    wl.acquire(15000);



}

【问题讨论】:

    标签: android notifications push-notification


    【解决方案1】:

    试试这个:

        private static void generateNotification(Context context, String message) {
        int icon = R.drawable.notification_icon;
        long when = System.currentTimeMillis();
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(icon, message, when);        
        String title = context.getString(R.string.app_name);
       // Log.i(TAG, "Received reg id:=>"+regId);
        Intent notificationIntent = new Intent(context, Message.class);
        notificationIntent.putExtra("Message", message); 
    
        // set intent so it does not start a new activity
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
        notification.setLatestEventInfo(context, title, message, intent);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
        // Play default notification sound
        notification.defaults |= Notification.DEFAULT_SOUND;
    
        // Vibrate if vibrate is enabled
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification);      
        Constant.iMessageParsing = 0;
    
    }
    

    在 GCMIntentService 类的 onMessage(Context context, Intent intent) 方法中调用此方法。

    试试这个代码::

    PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    boolean isScreenOn = pm.isScreenOn();
    Log.e("screen on.................................", ""+isScreenOn);
    
    if(isScreenOn==false)       
       {
         WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,"MyLock");                            
         wl.acquire(10000);
         WakeLock wl_cpu = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyCpuLock");
         wl_cpu.acquire(10000);
       }
    

    【讨论】:

    • 我已经检查了调试,当请求从服务器发送时调试器不工作,当我解锁屏幕时调试器开始工作
    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多