精华内容
下载资源
问答
  • 常驻通知栏

    千次阅读 2019-08-13 13:06:45
    常驻通知栏 设置一个默认通知栏 不废话,上代码 //创建一个通知管理器 NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // 获取Notification...

    常驻通知栏

    不废话,上代码

    //创建一个通知管理器
      NotificationManager  notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      //        获取Notification实例
            Notification notification=new NotificationCompat.Builder(this,channelId)
                    .setContentTitle("title")
                    .setContentText("content")
                    .setWhen(System.currentTimeMillis())
      //             .setAutoCancel(false) 点击通知栏后是否消失
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon))
                   // .setCustomContentView(remoteView) // 设置自定义的RemoteView,需要API最低为24
                    .setSmallIcon( R.mipmap.instant)
                    // 设置点击通知栏后跳转地址
                    .setContentIntent( PendingIntent.getActivity(this, 0, new Intent(this, SecondActivity.class), 0))
                    .build();
    //        添加渠道
            if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
                NotificationChannel channel = new NotificationChannel(channelId, "subscribeName", NotificationManager.IMPORTANCE_DEFAULT);
                channel.setDescription("description");
                notificationManager.createNotificationChannel(channel);
            }
                    // 设置常驻 Flag
                       notification.flags = Notification.FLAG_ONGOING_EVENT;
                       //展示通知栏
            notificationManager.notify(notificationId,notification);   
    

    展示效果如下
    在这里插入图片描述
    注意
    在8.0以下手机是不用添加渠道的,但在之上不添加渠道不展示通知栏,9.0手机不设置setDescription()依旧不展示通知栏【华为mate10 9.0版本测试】;

    自定义通知栏

    有时间我们不想展示系统给的固定的展示效果,想自己写一个效果,只需要在代码中添加RemoteViews。

    //通过xml创建RemoteViews,并且动态改变布局中的内容
            RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.bar_notification);
            remoteView.setImageViewResource(R.id.iv_icon, R.mipmap.ic_launcher);
            remoteView.setTextViewText(R.id.tv_title, "my title");
            remoteView.setTextViewText(R.id.tv_content, "my content");
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
            String time = sdf.format(date);
            remoteView.setTextViewText(R.id.tv_time, time);
    

    并放开setCustomContentView()功能,这时Notification中设置的方法基本都不可用了,但是setSmallIcon()必须有(虽然没展示效果),不管是不是自定义布局都要有,否则就会报错。

    关闭通知栏

     /**
         * 取消常驻通知
         *
         * @param context
         */
        public static void delNotification(Context context) {
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.cancel(notificationId);
        }
    

    这里的notificationId即为最开始notificationManager.notify(notificationId,notification)中的notificationId。

    手机设置里修改通知状态

     public void setting(View view) {
         Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
         intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId);
         intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
         startActivity(intent);
     }
    

    这里的channelId 就是我们在添加渠道时设置的Id

    防止多创建界面

    我们在 设置setContentIntent方法时是直接getActivity,这样会导致new出一个activity,点击返回键会返回到原来未点通知之前的界面

     /**
          * 构造一个合成的回退栈,主要用于跨任务导航
          */
    
         Intent resultIntent = new Intent(context, MainActivity.class);
         TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
         stackBuilder.addParentStack(MainActivity.class);
         stackBuilder.addNextIntent(resultIntent);
         PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    
    

    将resultPendingIntent 传入.setContentIntent()即可

    其实到这里,基本效果已经好了,市面上大部分APP的通知栏都是系统自带的效果,自定义的都不是,就算是自定义的大部分也不需要进行网络图片的加载!!!

    加载网路数据

    既然加了图片,很大可能是从服务器发送来的照片
    这时setImageViewResource()功能就不行了,还好,remoteView里有另外两种方法

    remoteView.setImageViewUri(R.id.iv_icon, uri);
    remoteView.setImageViewBitmap(R.id.iv_icon,bitmap);
    

    看源码发现方式与ImageView的setImageURI(Uri)和setImageBitmap(Bitmap)类似,
    这就好办了

     Uri uri = Uri.parse("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1565676565588&di=14318ae342c65b768a272ef158a6fd78&imgtype=0&src=http%3A%2F%2Fpic1.16pic.com%2F00%2F51%2F76%2F16pic_5176356_b.jpg");
    remoteView.setImageViewUri(R.id.iv_click, uri);
    

    发现一点也不行,以为是图片过大或者图片是jpg 格式的问题,后来才发现这个方式原来针对的是本地图片,都说了类似imageview了,狠狠地打脸啊,在此记录一下!!!

    imageview.setImageURI(Uri.parse("file:///assets/xxx.jpg"))
    

    相对应的

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.a)
    

    这也是本地图片,既然写到这里记录一下图片转化bitmap的方法吧,省得自己再被打脸

    // 一、加载R文件下的图片
    //最简单的方式
    Bitmap bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.loading);
    //二、文件流的方式转化bitmap
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(dir + "/" + fileName);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Bitmap bitmap = BitmapFactory.decodeStream(fis);
    
    // 三、网络url转化为bitmap
    URL url = new URL(imgUrl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    InputStream is = conn.getInputStream();
    Bitmap bm = BitmapFactory.decodeStream(is);
    
    

    前两种转化为bitmap时,都可能会因为图片过大导致溢出,
    第一种方式可以参照大佬android避免decodeResource图片时占用太大的内存

    /** 
    * 我们知道调用BitmapFactory.decodeResource时,如果手机屏幕的密度很大时,如果只是在hdpi放了图片, decode出来的* bitmap会自动的scale放大。 而且如果按照ARGB_8888模式decode的话一个像素需要4个字节,这样343*433分辨率的图* * 片decode大概会占用2M多内存。 所以从2方面控制,一个是禁止scale, 一个是使用ALPHA_8模式decode。注意:这里* * 需要看看效果是否ok, 因为使用低质量的模式decode图片可能会修饰一些图片的细节。
    
     * 因为目前我们只有一套资源文件,全都放在hdpi下面,这样如果是遇到高密度手机, 系统会按照 
     * scale = (float) targetDensity / density 把图片放到几倍,这样会使得在高密度手机上经常会发生OOM。 
     * 
     * 这个方法用来解决在如果密度大于hdpi(240)的手机上,decode资源文件被放大scale,内容浪费的问题。 
     * 
     * @param resources 
     * @param id 
     * @return 
     */  
    public static Bitmap decodeResource(Resources resources, int id) {  
      
        int densityDpi = resources.getDisplayMetrics().densityDpi;  
        Bitmap bitmap;  
        TypedValue value = new TypedValue();  
        resources.openRawResource(id, value);  
        BitmapFactory.Options opts = new BitmapFactory.Options();  
        opts.inPreferredConfig = Bitmap.Config.ALPHA_8;  
        if (densityDpi > DisplayMetrics.DENSITY_HIGH) {  
            opts.inTargetDensity = value.density;  
            bitmap = BitmapFactory.decodeResource(resources, id, opts);  
        }else{  
            bitmap = BitmapFactory.decodeResource(resources, id);  
        }  
      
        return bitmap;  
    }  
    

    第二种方式可以参照大佬图片文件和Bitmap之间的转换

    言归正传,我们以remoteView.setImageViewBitmap(R.id.iv_icon,bitmap)为例,这里需要设置网络图片转为bitmap的方法,也就是如上第三种方式,图片加载需要设置异步,这里使用Thread+Handler模式,代码如下:

    public void setNotification(Context mContext) {
            context = mContext;
            final String iconUrl = SpUtils.getSpUtils(context).getNotificationIconUrl();
            if (TextUtils.isEmpty(iconUrl)) {
                return;
            }
            new Thread() {
                @Override
                public void run() {
                    getBitmap(iconUrl);
                }
            }.start();
        }
    
     /**
         * @param
         * @author admin
         * @Description: 获取Bitmap<br/>
         */
        private void getBitmap(String resUrl) {
            URL fileUrl = null;
            Bitmap bitmap = null;
            try {
                fileUrl = new URL(resUrl);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            try {
                HttpURLConnection conn = (HttpURLConnection) (fileUrl != null ? fileUrl
                        .openConnection() : null);
                assert conn != null;
                conn.setDoInput(true);
                conn.connect();
                InputStream is = conn.getInputStream();
                bitmap = BitmapFactory.decodeStream(is);
                is.close();
                Message message = Message.obtain();
                message.obj = bitmap;
                handler.sendMessage(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                showNotivication((Bitmap) msg.obj);
            }
        };
    

    到这里,我们需要的bitmap即可在最开始的代码里通过 showNotivication((Bitmap) msg.obj) 引用了。

    到这里网络加载也基本上可以结束了。但是,但是,当发现公司要求通知栏里展示两张图片的时候,我又纳闷了,用Thread+Handler,最常见的是异步加载一个请求呀!没见过new 两个 thread的(据说new两个会数据会串,俺也不知道,俺也没地方问),就算可以,讲个异步操作都执行完在去执行show通知栏会不会很麻烦(其实不算麻烦,既然是异步,总有先后,当后加载好的图片加载完成后再去调用通知栏方法就好了嘛)?当然也可以用AsyncTask加载更多图片

    展开全文
  • 通知栏Notification和常驻通知栏

    千次阅读 2017-07-25 10:56:24
    通知栏Notification和常驻通知栏: &&.普通Notification 一、整体步骤 //1.获取通知栏管理器实例 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); ...
    通知栏Notification和常驻通知栏:

    &&.普通Notification
    一、整体步骤
    //1.获取通知栏管理器实例
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    //2.获取要弹出的Notification
    Notification notification = ....自己封装的构建类及相应方法....
    //3.弹出Notification
    manager.notify( 【该通知对应的ID值】, notification );


    二、其中第二步生成Notification:
    两类方法
    1.使用系统默认样式
        参考默认样式的示意图,和各个参数以及构造方法的说明,设置各个字段的值.
         可以使用notification.setContentIntent()或者其它手段来设置对应的PendingIntent.
         注意:该方式下,不同api版本区间最实用的构造方法或许不同,可以参考相关资料。

    2.自定义样式
        2.1自定义RemoteView样式,获取RemoteView
        2.2将notification与RemoteView绑定
            notification.contentView = remoteView;
            此时务必使用以下方式来指定notification的点击事件:
            notification.contentIntent = pendingIntent;

    参考:


    三、关于上面RemoteView的自定义:
    1.可以为RemoteView指定对应的布局文件,来确定样式
    2.可以为里面每个不同的View绑定不同的PendingIntent
    (经我测试,没有指明PendingIntent的部分,点击会触发整个Notification绑定的PendingIntent)


    &&.常驻通知栏
        只要设置一下notification.falgs的值就行了,与常量 Notification.FLAG_ONGOING_EVENT 进行“位或”运算就行了:
        notice.flags |= Notification.FLAG_ONGOING_EVENT;//该通知常驻在通知栏,始终存在

        其它类似的语句还有:
        notice.flags |= Notification.FLAG_AUTO_CANCEL;//点击后该通知消失

        顺便说一下Notificaiton.flags,
        在Notification类中定义了一系列二进制常量,因此上面是“|=”即“位或”运算,它们的对应的效果如下:(我没全部尝试)
        public static final int FLAG_SHOW_LIGHTS        = 0x00000001;//控制闪光

         public static final int FLAG_ONGOING_EVENT      = 0x00000002;//将flag设置为这个属性那么通知就会常驻

         public static final int FLAG_INSISTENT          = 0x00000004; //重复发出声音,直到用户响应此通知 

         public static final int FLAG_ONLY_ALERT_ONCE    = 0x00000008;//标记声音或者震动一次

         public static final int FLAG_AUTO_CANCEL        = 0x00000010; //在通知栏上点击此通知后自动清除此通知 

         public static final int FLAG_NO_CLEAR           = 0x00000020;//将flag设置为该值,则通知栏的清楚按钮就不会出现

         public static final int FLAG_FOREGROUND_SERVICE = 0x00000040;//前台服务标记

         public static final int FLAG_HIGH_PRIORITY = 0x00000080;//高权限??? 
    展开全文
  • app常驻通知栏通知栏

    热门讨论 2013-03-16 11:29:10
    android环境下,进入APP,通知栏挂起一条通知,不可被自动清除,且在软件运行过程中,可以直接通过点击通知栏进入APP堆栈内最后一个activity。在软件退出时,通知栏自动关闭。
  • 应用启动后显示常驻通知栏。声音 和 震动这块设置都是默认的,也可以说就没有重新设置这块。默认就是常驻通知栏显示时是震动,是响铃,还是静音,都是跟系统设置来的。 这样运行了一段时间,没有太大问题。忽然有一...

    应用启动后显示常驻通知栏。声音 和 震动这块设置都是默认的,也可以说就没有重新设置这块。默认就是常驻通知栏显示时是震动,是响铃,还是静音,都是跟系统设置来的。

    这样运行了一段时间,没有太大问题。忽然有一天,有用户留言说自己的手机打开我们的应用后一直在响。

    很快确定到,这个就是常驻通知栏刷新的问题。常驻通知栏中构造Notification的时候,默认了一些设置。这在大部分手机上正常,不会有明显的问题,如xiao mi 6, honor 10,oppo A5等。

    而在某些手机上会出现问题,比如M1816。具体是这样的,把手机设置为震动,那么打开我们应用的时候,会出现明显的震动,不止一次;把手机设置为响铃,则会出现明显的提示声音。当然,手机静音状态下没有问题。

    那就把通知栏的震动 或者 提示音去掉。

    1、mBuilder.setSound(null);

    这种设置无效,至少在8.0以上的手机无效。

    2、mBuilder.setOnlyAlertOnce(true)

    这样设置,每次只会提醒一次声音,不会重复提醒。

    3、改变通知优先级   (改之前设置的是    IMPORTANCE_DEFAULT )

    这样设置,不管手机设置震动,还是响铃,,,我们应用的常驻通知栏都只是默默的显示,不会震动或者有提示音。

     

    在8.0以后,通知栏的使用需要配合NotificationChannel

    NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);

     

    channelId需要有唯一性。如果是重复的,在通知栏里面就会给覆盖掉。

    importance是表示设置通知的优先级:

          NotificationManager.IMPORTANCE_NONE          关闭通知
          NotificationManager.IMPORTANCE_MIN              开启通知,不会弹出,但没有提示音,状态栏中无显示
          NotificationManager.IMPORTANCE_LOW             开启通知,不会弹出,不发出提示音,状态栏中显示
          NotificationManager.IMPORTANCE_DEFAULT     开启通知,不会弹出,发出提示音,状态栏中显示
          NotificationManager. IMPORTANCE_HIGH           开启通知,会弹出,发出提示音,状态栏中显示

     

    我使用了最后一种方式,问题解决。后续观察,是否会出现其他问题,未完待续.......

    展开全文
  • 主要介绍了android实现常驻通知栏遇到的问题及解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • android实现常驻通知栏

    千次阅读 2020-06-28 14:43:47
    实现常驻通知栏时遇到的问题: 无论如何就是不显示通知,查看日志发现貌似报错了: 2020-06-28 14:11:34.923 6387-6387/jinbin.weather E/CrashReport: android.app.RemoteServiceException: Bad notification ...

    实现常驻通知栏时遇到的问题:

    无论如何就是不显示通知,查看日志发现貌似报错了:

    2020-06-28 14:11:34.923 6387-6387/xxx E/CrashReport: android.app.RemoteServiceException: Bad notification posted from package xxx: Couldn't inflate contentViewsandroid.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1944)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:192)
            at android.app.ActivityThread.main(ActivityThread.java:6815)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)

    说的是布局报错,所使用的布局如下:

     根据报错信息来看,就是这个

    android.support.constraint.ConstraintLayout

    的问题了。

    然后将布局的根view修改为RelativeLayout。

    运行,报错,,,,纳尼?

    2020-06-28 14:24:02.622 11436-11436/xxx E/CrashReport: android.app.RemoteServiceException: Bad notification posted from package xxx: Couldn't inflate contentViewsandroid.view.InflateException: Binary XML file line #2: Binary XML file line #2: You must supply a layout_height attribute.
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1944)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:192)
            at android.app.ActivityThread.main(ActivityThread.java:6815)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)

    虽然继续报错,但是发现跟第一次报的错不同了,说明第一个报错问题解决。

    那么来细看第二个报错信息:

    Binary XML file line #2: You must supply a layout_height attribute.

    看信息是说布局中缺少layout_height属性,但是确认布局中设置了这属性啊。。。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_74"
        android:background="@drawable/shape_bg_resident_notify">
    
      <ImageView
          android:id="@+id/iv_resident_weather"
          android:layout_width="@dimen/dp_45"
          android:layout_height="@dimen/dp_45"
          android:layout_marginStart="@dimen/dp_10"
          android:background="@mipmap/weather_icon_blue_big_cloudy"
          android:layout_centerVertical="true"/>
    
      <TextView
          android:id="@+id/tv_resident_weather_temp"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="28"
          android:textSize="@dimen/sp_40"
          android:textColor="#ff333333"
          android:layout_toEndOf="@+id/iv_resident_weather"
          android:layout_centerVertical="true"
          android:layout_marginStart="@dimen/dp_5"/>
    
      <TextView
          android:id="@+id/tv_resident_degree"
          android:layout_width="@dimen/dp_6"
          android:layout_height="@dimen/dp_6"
          android:layout_marginStart="@dimen/dp_3"
          android:layout_marginTop="@dimen/dp_24"
          android:layout_toEndOf="@+id/tv_resident_weather_temp"
          android:background="@drawable/shape_resident_weather_temp"/>
    
      <TextView
          android:id="@+id/tv_resident_weather_cond"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="多云转晴"
          android:textSize="@dimen/sp_16"
          android:textColor="@color/color_333333"
          android:layout_marginTop="@dimen/dp_14"
          android:layout_marginStart="@dimen/dp_6"
          android:layout_toEndOf="@+id/tv_resident_degree" />
    
      <TextView
          android:id="@+id/tv_resident_temp_range"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="21~34℃"
          android:textColor="@color/color_333333"
          android:textSize="@dimen/sp_16"
          android:layout_marginTop="@dimen/dp_5"
          android:layout_below="@+id/tv_resident_weather_cond"
          android:layout_toEndOf="@+id/tv_resident_degree"
          android:layout_marginStart="@dimen/dp_6"/>
    
      <TextView
          android:id="@+id/tv_resident_aqi"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="空气优"
          android:textSize="@dimen/sp_16"
          android:textColor="@color/color_333333"
          android:layout_alignParentEnd="true"
          android:layout_marginTop="14dp"
          android:layout_marginEnd="@dimen/dp_10"/>
    
      <ImageView
          android:id="@+id/iv_resident_aqi"
          android:layout_width="@dimen/dp_18"
          android:layout_height="@dimen/dp_18"
          android:src="@drawable/ic_icon_aqi"
          android:layout_toStartOf="@+id/tv_resident_aqi"
          android:layout_marginEnd="@dimen/dp_5"
          android:layout_marginTop="@dimen/dp_16"/>
    
      <TextView
          android:id="@+id/tv_resident_desc"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="浦东新区 14:33发布"
          android:textSize="@dimen/sp_12"
          android:textColor="@color/color_999999"
          android:layout_marginEnd="@dimen/dp_10"
          android:layout_alignParentEnd="true"
          android:layout_below="@+id/tv_resident_aqi"
          android:layout_marginTop="@dimen/dp_11"/>
    
    </RelativeLayout>

    莫名奇妙啊简直

    然后仔细想想可能的原因:难不成是因为分辨率适配的问题?

    就是没有匹配到合适的分辨率的尺寸。那就试一下,把布局中所有引用@dimen的地方直接改为使用尺寸。

    运行,成功!!!

    问题:发现有个布局上的问题

    自定义通知栏设置了背景,宽度是match_parent,但是发现在某些手机上,如小米6(截图所示),可以看到宽度竟然没有充满全屏。

    但是在华为, vivo等手机上正常。

    那就把这个背景去掉,自适应好了。

    展开全文
  • android常驻通知栏点击事件

    千次阅读 2020-06-29 10:52:48
    android实现了常驻通知栏的显示后,需要处理点击事件。点击后进入首页。 1、发现无法收到广播 1)静态注册 2)点击响应代码如下 /** * 说明:通知栏点击事件 * 作者:耿保龙 * 添加时间:2020/6/28 17:11 ...
  • 实现常驻通知栏时遇到的问题:无论如何就是不显示通知,查看日志发现貌似报错了:2020-06-28 14:11:34.923 6387-6387/xxx E/CrashReport: android.app.RemoteServiceException: Bad notification posted from ...
  • 项目开发中的需求:常驻通知栏所用数据来源于后端接口,有时效性,需要定时刷新数据。 常驻通知栏定时刷新: 需求是【6:10,7:10,8:10,9:10,10:10,11:10,12:10,13:10,14:10,15:10,16:10,17:10,18:10,19:10,20:10,21...
  • 除了内存占用小,界面简洁美观之外,最重要的是该软件能常驻通知栏,一来腾出一个软件图标的宝贵位置,二来需要开启闪光灯时能够快速的从通知栏里找到,节省了宝贵时间。欢迎试用并给出宝贵意见,后续版本正在紧张...
  • 通知栏常驻 通知栏常在 锁屏黑屏界面手势绘图打开手电筒 === 不同手机,方法类似。 手机设置选项中有一项手势控制自己打开设置下就好了 进入手机"设置"界面后,找到"手势体感"点击进入 进入"手势体感"设置...
  • android常驻通知栏的实现

    万次阅读 2015-11-17 21:46:06
    最近做一个项目,其中一个要加入的功能是常驻Notification,以前写的时候只能出现 在“通知”这一组中,想把它放在“正在运行”组中却不知道怎么放,查了下官方文档,找到了方法,在notification的flags字段中加...
  • //代表是常驻的,主要是配合服务 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.notify_custom); //自定义点击事件、会在Service. onStartCommand中回调 Intent stopIntent = new ...
  • 通知 一个示例应用程序显示了Android通知功能。 主要活动 正常通知 正常通知动作 大文字通知 收件箱通知 捆绑通知 大图通知 消息通知 媒体通知 自定义视图通知 执照 NotificationDemo for Android Copyright (c) ...
  • 实现常驻通知栏时遇到的问题:无论如何就是不显示通知,查看日志发现貌似报错了:2020-06-28 14:11:34.923 6387-6387/xxx E/CrashReport: android.app.RemoteServiceException: Bad notification posted from ...
  • Android中添加常驻通知栏

    万次阅读 2015-10-10 17:47:48
    直接看代码吧,很简单的小功能,核心代码就是设置notification的flags为...// 添加常驻通知 private void setNotification() { NotificationManager notificationManager = (NotificationManager) getSystemServic
  • //代表是常驻的,主要是配合服务 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.notify_custom); //自定义点击事件、会在Service. onStartCommand中回调 Intent ...
  • public final static String INTENT_BUTTONID_TAG = ...如果两个通知栏的代码是一模一样的 那么就有可能出现标题上的bug 就是点击app1 跳转到了app2 的主页上 所以 此处需要修改上面的代码 加一个字符即可 ButtonId2
  • function njsNotificationForAndroid({title = '标题',content = '描述',isOngoing = true}){if (uni.getSystemInfoSync().platform == "android") {console.log('准备调起常驻通知栏');const main = plus.android....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,959
精华内容 1,183
关键字:

常驻通知栏