当前位置: 首页 > 知识库问答 >
问题:

Android8.1版本,StartForreground错误通知

滕弘新
2023-03-14
 android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:171)
        at android.app.ActivityThread.main(ActivityThread.java:6649)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
    public class MyFirebaseMessagingService extends FirebaseMessagingService
    {
        private NotificationManager notifManager;
        Context mContext;
        Random random = new Random();
        int m = random.nextInt(9999 - 1000) + 1000;

        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) 
        {
           sendNotification();
        }



   public void sendNotification()
   {
   Intent intent = new Intent(this, Home.class);
   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   PendingIntent pendingIntent = PendingIntent.getActivity(this, m /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT);

   String channelId = getString(R.string.default_notification_channel_id);
   Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
   NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                   .setSmallIcon(R.drawable.app_icon)
                   .setContentTitle("Logipace")
                   .setStyle(new NotificationCompat.BigTextStyle()
                           .bigText(message))
                   .setContentText(message)
                   .setAutoCancel(true)
                   .setSound(defaultSoundUri)
                   .setContentIntent(pendingIntent);
   notificationBuilder.setDefaults(Notification.DEFAULT_SOUND);

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

    // Since android Oreo notification channel is needed.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
    {
        NotificationChannel channel = new NotificationChannel(channelId, "LOGIPACE", NotificationManager.IMPORTANCE_DEFAULT);
        notificationManager.createNotificationChannel(channel);
    }

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

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(intent);
}
    }

下面是我在活动类的onCreate()方法中使用的代码。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
        {
            // Create channel to show notifications.
            String channelId  = getString(R.string.default_notification_channel_id);
            String channelName = getString(R.string.default_notification_channel_name);
            NotificationManager notificationManager =
                    getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(new NotificationChannel(channelId,
                    channelName, NotificationManager.IMPORTANCE_LOW));
        }

帮助我解决这个问题。

共有1个答案

於彬
2023-03-14

您可以将此用于Oreo及更高版本

如果使用服务类,可以将以下代码

public class BlablaService extends Service 

    @Override
    public void onCreate(){
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            startMyOwnForeground();
        else
            startForeground(1, new Notification());
    }

    private void startMyOwnForeground(){
        String NOTIFICATION_CHANNEL_ID = "com.example.simpleapp";
        String channelName = "My Background Service";
        NotificationChannel chan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_NONE);
        chan.setLightColor(Color.BLUE);
        chan.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        assert manager != null;
        manager.createNotificationChannel(chan);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
        Notification notification = notificationBuilder.setOngoing(true)
                .setSmallIcon(R.drawable.icon_1)
                .setContentTitle("App is running in background")
                .setPriority(NotificationManager.IMPORTANCE_MIN)
                .setCategory(Notification.CATEGORY_SERVICE)
                .build();
        startForeground(2, notification);
    } 

当然,不要忘记forregroundService权限,您的AndroidManifest.xml

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 类似资料:
  • 我已经在我的Ubuntu16.04上安装了JDK1.8,为了完成一些我必须安装JDK1.7的工作,我没有对旧版本做任何操作就安装了它,并且更改了$JAVA_HOME以指向新安装的位置。 echo运行良好,显示新安装的版本为1.7 但当我执行时,它显示的是较早安装的版本,即1.8。 如果我错在什么地方,请纠正我,我需要很好的解释这一点。 谢谢你。这是我的终端机

  • 我试图传递一个XML文件作为Http POST请求。当我在一个Linux框上使用CURL测试它时,网络服务运行良好,XML格式良好。我试图编写一个Java实用程序来做同样的事情。我在Apache Commons HttpClient库3.1版本中找到了一个示例,下面是我的代码: 进口: 代码: 我得到一个错误: 更新 增加了Commons-logging-1.2。罐子 仍然会出现错误: 这句话的意

  • 我使用LiquiBase3.6.1来处理Mysql数据库。我使用lib“mysql-connector-java-6.0.2.jar”,在使用diff命令时,我得到了以下错误: 线程“main”java.lang.UnsupportedClassVersionError中出现异常:JVMCFRE003主版本错误;class=com/mysql/cj/jdbc/driver,offset=6 当我尝

  • 更新的Android Studio。 下载的gradle。在PC的环境设置中更改了Gradle文件夹。 在Android Studio中,返回

  • 我正试着在我的电脑上用Linux Mint 64位的android studio。我安装了java-8-oracle,如下所示:错误现在运行Android Studio,当我启动一个新项目时,它会向我返回一条消息: 但目前我无法修复它...你能帮帮我吗?多谢!

  • 问题内容: (由Google翻译人员翻译)我搜索了Internet,到处都是人们在build.gradle中更改版本的地方。请帮帮我。 我已经准备好更新gms插件,但是我该怎么做? 请通过更新google- services插件的版本来解决版本冲突(有关最新版本的信息,请访问 https://bintray.com/android/android-tools/com.google.gms.goog