Android通知无法在Android 6.0(Marshmallow)上运行

时间:2016-10-24 08:35:21

标签: android notifications android-notifications android-6.0-marshmallow

我正在Android上实施本地通知,我遇到的问题是它们没有出现在Android 6.0(Samsung S7)上。 我正在寻找解决方案,但我找不到任何解决这个问题的方法。我在适当的res / drawable文件夹中有图标,我也定义了通知标题,文本,铃声(原始文件夹),但它没有显示... 有我的代码:

    Context acontext = getApplicationContext();

    PackageManager pm = acontext.getPackageManager();
    Intent notificationIntent = pm.getLaunchIntentForPackage(acontext.getPackageName());
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getActivity(acontext, 0, notificationIntent, 0);
    int notification_icon = acontext.getResources().getIdentifier("icon", "drawable", acontext.getPackageName());
    int notificationID = 0;

    // Build notification
    Notification noti = new Notification.Builder(acontext)
            .setContentTitle("Title")
            .setContentText("Incoming text")
            .setSmallIcon(notification_icon)
            .setContentIntent(pendingIntent)
            .setLights(Color.RED, 1, 1)
            .build();
    NotificationManager notificationManager = (NotificationManager) acontext.getSystemService(Context.NOTIFICATION_SERVICE);
    // hide the notification after its selected
    noti.sound = Uri.parse("android.resource://" + acontext.getPackageName() + "/raw/incoming");
    noti.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(notificationID, noti);

有没有其他人遇到过这个问题?任何帮助,将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:3)

新通知有一些变化。不推荐使用新的NotificationCompat.Builder(this),并且上面的android oreo需要NotificationChannel。你可以尝试这个解决方案。

NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
        Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

        NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
        bigText.bigText(verseurl);
        bigText.setBigContentTitle("Title");
        bigText.setSummaryText("Text in detail");

        mBuilder.setContentIntent(pendingIntent);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
        mBuilder.setContentTitle("Your Title");
        mBuilder.setContentText("Your text");
        mBuilder.setPriority(Notification.PRIORITY_MAX);
        mBuilder.setStyle(bigText);

        NotificationManager mNotificationManager =
                (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("notify_001",
                    "Channel human readable title",
                    NotificationManager.IMPORTANCE_DEFAULT);
            mNotificationManager.createNotificationChannel(channel);
        }

        mNotificationManager.notify(0, mBuilder.build());

答案 1 :(得分:1)

在Android中显示通知涉及多个层,请首先检查该设置是否适用于相同OS版本的其他设备。通常,这类问题是特定于设备的,不是特定于操作系统的,还请检查通知日志how to check notification logs in android ?

如果问题是特定于设备的,则以下为便捷提示:

  1. 检查设备设置未阻止您的应用程序的通知。
  2. 检查电源设置以阻止非优先通知。
  3. 如果日志中有通知但未显示,则内部操作系统设置/配置可能存在问题。 (相信我,Android并不是很干净的操作系统)
  4. 如果可以,请尝试将设备重置为出厂设置。 (就我而言,这可行)

答案 2 :(得分:0)

必须启用Google Play服务才能在您的Android设备上接收推送通知。如果启用了Google Play服务并且常规故障排除步骤尚未解决问题,则可能需要重置应用。要重置应用程序,请转到设置→应用程序→PagerDuty,然后点击清除数据。

对于Android 6.0及更高版本,请确保将应用设置为优先模式下的优先级应用。

对于Android 6.0及更高版本,请检查应用程序是否被Doze模式静音。

答案 3 :(得分:0)

检查android版本,相应地为>设置图标6.0和其他。对于6.0版本,我们需要白色背景图标。

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
 icon = R.mipmap.your_logo_for_Lolipop;
}else{
 icon = R.drawable.your_logo_for_Kitkat ;
}