Notification Manager

android app通知栏权限状态判断及跳转状态栏设置页面

拟墨画扇 提交于 2020-11-03 07:56:42
import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.support.v4.app.NotificationManagerCompat; /** * Created by chenxiangxiang on 2019/1/16. */ public class Utils { public static boolean isPermissionOpen(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return NotificationManagerCompat.from(context).getImportance() != NotificationManager.IMPORTANCE_NONE; } return NotificationManagerCompat.from(context).areNotificationsEnabled

解决Android8.0之后开启service时报错IllegalStateException: Not allowed to start service Intent ...

我怕爱的太早我们不能终老 提交于 2020-04-29 17:56:21
项目测试时发现的,在双击返回键关闭应用后(并未杀死后台)重新打开APP,其他手机都OK,但是8.0的手机会出现较频繁的crash。检查代码,问题锁定在重新开启应用时的startService()上。 查找资料说是Android 8.0 不再允许后台service直接通过startService方式去启动,否则就会引起IllegalStateException。而网上给出的解决方式大多是这样的: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context.startForegroundService( new Intent(context, MyService. class )); } else { context.startService( new Intent(context, MyService. class )); } 然后必须在Myservice中调用startForeground(): @Override public void onCreate() { super.onCreate(); startForeground( 1 , new Notification()); } 不过可能是我代码本身的问题,使用上面代码之后应用报出 RemoteServiceException: Bad notification

Android 8通过startService引起crash问题

落花浮王杯 提交于 2020-04-29 17:56:04
Android 8.0 不再允许后台service直接通过startService方式去启动,否则就会引起IllegalStateException。解决方式: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { context. startForegroundService ( new Intent(context, MyService. class )); } else { context.startService( new Intent(context, MyService. class )); } 然后必须在Myservice中调用startForeground(): @Override public void onCreate() { super.onCreate(); startForeground( 1, new Notification()); } 注意:在要开启的service中给notification添加 channelId ,否则会出现如下错误: RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid ch...... 完整参考代码如下:

在Android 8.0中使用Notification中发生 Bad notification for startForeground错误

邮差的信 提交于 2020-04-29 17:06:16
在Android 8.0中使用Notification中发生 Bad notification for startForeground错误 String CHANNEL_ONE_ID = "CHANNEL_ONE_ID"; String CHANNEL_ONE_NAME= "CHANNEL_ONE_ID"; NotificationChannel notificationChannel; //进行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

Android8以上 显示通知栏简单实现

空扰寡人 提交于 2020-04-16 10:30:34
【推荐阅读】微服务还能火多久?>>> private void showNotification() { NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); // 点击通知本身会显示ResultActivity Intent resultIntent = new Intent( this , MainActivity. class ); resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent resultPendingIntent = PendingIntent.getActivity( this , 0 , resultIntent, PendingIntent.FLAG_UPDATE_CURRENT ); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name,

android.app.RemoteServiceException: Bad notification for startForeground

元气小坏坏 提交于 2019-12-27 01:16:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 错误提示: android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null 8.0后要加上channel来区分通知,故需要改为如下的写法: /** * 设置服务在前台可见 */ private void startForeground(){ /** * 通知栏点击跳转的intent */ PendingIntent pendingIntent = PendingIntent.getActivity(this,0, new Intent(this, WelcomeActivity.class), PendingIntent.FLAG_CANCEL_CURRENT); /** * 创建Notification */ NotificationChannel notificationChannel; Notification notification; if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O)

Android Notification的使用

拥有回忆 提交于 2019-12-07 10:15:30
今天使用4.0.3使用 Notification notification2 = new Notification(R.drawable.advise2, "通知测试", System.currentTimeMillis()); notification2.setLatestEventInfo(getActivity(), "testTitle", "testContent", null); 结果androidstudio报错,setLatestEventInfo该方法找不到,经过查证官方 在API Level 11中,该函数已经被替代,不推荐使用了。所以 在4.0.3平台也就是API Level 15中,使用Notification的setLatestEventInfo()函数时,显示setLatestEventInfo()效果。建议使用 Notification.Builder 来创建 notification 实例 Notification.Builder builder1 = new Notification.Builder(MainActivity. this ) ; builder1.setSmallIcon(R.drawable. advise2 ) ; //设置图标 builder1.setTicker( "显示第二个通知" ) ; builder1

Notification通知栏

不羁岁月 提交于 2019-12-05 04:44:25
目录介绍 1.Notification简单概述 2.Notification通知用途 3.Notification的基本操作 3.1 Notification创建必要的属性 3.2 Notification简单创建步骤 3.3 关于setSmallIcon()与setLargeIcon()区别 3.4 Notification的Action属性【交互作用】 3.5 更新Notification 3.6 取消Notification 3.7 设置flag属性 3.8 设置Notification的通知效果 3.9 设置自定义Notification通知栏布局 4.Notification相关属性说明 4.1 PendingIntent说明 4.2 创建返回栈PendingIntent 4.3 注意要点 5.部分源码分析思考 5.1 RemoteView是什么? 5.2 查看源码,了解Notification如何创建布局 6.关于Android8.0通知栏适配 6.1 Android O(8.0)通知的改变 6.2 报错内容和解决方案 6.3 最终解决方案 7.关于其他 好消息 已经解决了8.0以上通知栏不能显示问题。封装成了lib库,欢迎大家下载。已经放到正式项目运行多时! 项目地址链接: https://github.com/yangchong211/YCNotification

Android6.0 Notification工作原理源码解析(二)

末鹿安然 提交于 2019-12-05 04:44:14
时序图 通知的发送是通过NotificationManager的notify()方法: NotificationManger->notify() public void notify(int id, Notification notification) { notify(null, id, notification); } public void notify(String tag, int id, Notification notification) { int[] idOut = new int[1]; INotificationManager service = getService(); String pkg = mContext.getPackageName(); ... try { service.enqueueNotificationWithTag(pkg, mContext.getOpPackageName(), tag, id, stripped, idOut, UserHandle.myUserId()); if (id != idOut[0]) { Log.w(TAG, "notify: id corrupted: sent " + id + ", got back " + idOut[0]); } } catch (RemoteException e) {

Android FrameWork层框架

雨燕双飞 提交于 2019-12-05 03:03:57
Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层。我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得。   Framework层为我们开发应用程序提供了非常多的API,我们通过调用特殊的API构造我们的APP,满足我们业务上的需求。写APP的人都知道,学习Android开发的第一步就是去学习各种各样的API,什么Activity,Service,Notification等。这些都是framework提供给我们的,那么我就详细的讲讲Framework到底在整个Android架构中扮演着什么角色。   Framework其实可以简单的理解为一些API的库房,android开发人员将一些基本功能实现,通过接口提供给上层调用,可以重复的调用。   我们可以称Framework层才真正是Java语言实现的层,在这层里定义的API都是用Java语言编写。但是又因为它包含了JNI的方法,JNI用C/C++编写接口,根据函数表查询调用核心库层里的底层方法,最终访问到Linux内核。那么Framework层的作用就有2个。 用Java语言编写一些规范化的模块封装成框架,供APP层开发者调用开发出具有特殊业务的手机应用。 用Java Native Interface调用core lib层的本地方法