第一行代码(第2版):菜鸡踩坑系列----10.5前台服务报错

第一行代码 10.5 前台服务

这里首先需要进行用户权限申请

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

增加后还是报错。
我的报错信息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.servicetest, PID: 5976
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 . h a n d l e M e s s a g e ( A c t i v i t y T h r e a d . j a v a : 1976 ) a t a n d r o i d . o s . H a n d l e r . d i s p a t c h M e s s a g e ( H a n d l e r . j a v a : 107 ) a t a n d r o i d . o s . L o o p e r . l o o p ( L o o p e r . j a v a : 224 ) a t a n d r o i d . a p p . A c t i v i t y T h r e a d . m a i n ( A c t i v i t y T h r e a d . j a v a : 7541 ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( N a t i v e M e t h o d ) a t c o m . a n d r o i d . i n t e r n a l . o s . R u n t i m e I n i t H.handleMessage(ActivityThread.java:1976) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

在报错中 Bad notification for startForeground 说明这个通知有问题,寻求原因后才知道:Android8.0时增加了对通知渠道这个东西,具体原因和解决方法可以参考 https://www.jianshu.com/p/8baa62c5bfc2.原理和实现都有提及。

附上代码:

   String CHANNEL_ONE_ID = "CHANNEL_ONE_ID";
 String CHANNEL_ONE_NAME= "CHANNEL_ONE_ID";
NotificationChannel notificationChannel= null;
//进行8.0的判断
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    notificationChannel= new NotificationChannel(CHANNEL_ONE_ID,
    CHANNEL_ONE_NAME, NotificationManager.IMPORTANCE_HIGH);
    notificationChannel.enableLights(true);
    notificationChannel.setLightColor(Color.RED);
    notificationChannel.setShowBadge(true);
    notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
    NotificationManager manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    manager.createNotificationChannel(notificationChannel);
}
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.jianshu.com/p/14ba95c6c3e2"));
PendingIntent pendingIntent= PendingIntent.getActivity(this, 0, intent, 0);
Notification notification= new Notification.Builder(this).setChannelId(CHANNEL_ONE_ID)
        .setTicker("Nature")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle("这是一个测试标题")
        .setContentIntent(pendingIntent)
        .setContentText("这是一个测试内容")
        .build();
notification.flags|= Notification.FLAG_NO_CLEAR;
startForeground(1, notification);

-------------------------------在后面的最佳实现中,有点懵逼----------------------

发布了28 篇原创文章 · 获赞 11 · 访问量 2418

猜你喜欢

转载自blog.csdn.net/Y_an_Y/article/details/103497613
今日推荐