2016-03-22 81 views
0

我创建了一个正确接收GCM通知的应用程序。当我有应用程序打开通知振铃,并通知来正确地作为一个大箱子,如下面的代码中定义:Android GCM通知Builder功能在应用程序关闭时不起作用

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
      // .setLargeIcon(imageBitmap) 
       .setTicker("CheGroup") 
       .setContentTitle(title) 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setDefaults(Notification.DEFAULT_ALL) 
       .setContentIntent(pendingIntent) 
       .setStyle(new NotificationCompat.BigTextStyle() 
         .bigText(message)); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 

甚至当应用程序被关闭或手机锁定的通知来了,但手机没有振动/振铃。此外,通知仅出现在单行框中(与定义的BigTextStyle不同),因此通知消息的一部分无法读取。因此,NotificationCompat.Builder中定义的功能仅在应用程序处于打开状态时才起作用。我的问题是如何在应用程序关闭时通知响铃,并使其显示在BigTextStyle中。请注意,这些设置在应用程序打开时正常工作。

PS。权限在manifest文件中加入:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<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" /> 
<permission 
    android:name="es.appbit.chegroup.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="es.appbit.chegroup.permission.C2D_MESSAGE" /> 

回答

0

把它的onReceive

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
    ComponentName componentInfo = taskInfo.get(0).topActivity; 
    if(componentInfo.getPackageName().equalsIgnoreCase("com.example.myapp")){ 

     updateMyActivity(message); //send broadcast to notify app 



     //Activity Running 
//   Send a broadcast with the intent-filter which you register in your activity 
//   where you want to have the updates 
     } 
     else{ 
      //Activity Not Running 
      //Generate Notification 
      sendNotification(message); 
     } 

,并调用此方法

private void sendNotification(String message) { 
     Intent intent = new Intent(this,FullMapActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
//  int color = getResources().getColor(R.color.my_notif_color); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     /*PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 *//* Request code *//*, intent, 
       PendingIntent.FLAG_ONE_SHOT);*/ 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 



      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.headerlogo) 
        .setContentTitle("hey..! your booking is confirmed") 
        .setContentText(message) 
        .setAutoCancel(true) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 


      NotificationManager notificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
     } 
     else 
     { 

      NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.headerlogo) 
        .setContentTitle("hey..! your booking is confirmed") 
        .setContentText(message) 
        .setAutoCancel(true) 
//     .setColor(color) 
        .setSound(defaultSoundUri) 
        .setContentIntent(pendingIntent); 


      NotificationManager notificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
     } 
    } 
+1

为什么ü需要“如果(android.os.Build。 VERSION.SDK_INT arianit

相关问题