zoukankan      html  css  js  c++  java
  • Androidn Notification的使用,解决找不到setLatestEventInfo方法

    今天使用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.setContentTitle("通知"); //设置标题 builder1.setContentText("点击查看详细内容"); //消息内容 builder1.setWhen(System.currentTimeMillis()); //发送时间 builder1.setDefaults(Notification.DEFAULT_ALL); //设置默认的提示音,振动方式,灯光 builder1.setAutoCancel(true);//打开程序后图标消失 Intent intent =new Intent (MainActivity.this,Center.class); PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 0, intent, 0); builder1.setContentIntent(pendingIntent); Notification notification1 = builder1.build(); notificationManager.notify(124, notification1); // 通过通知管理器发送通知
    如果该通知只是起到 “通知”的作用,不希望用户点击后有相应的跳转,那么,intent,pendingIntent这几行代码可以不写

    Notification.Builder builder = new Notification.Builder(MainActivity.this); builder.setSmallIcon(R.drawable.advise);  builder.setTicker("显示第一个通知"); builder.setContentTitle("第一个通知"); builder.setContentText("每天进步一点点"); builder.setWhen(System.currentTimeMillis()); //发送时间 builder.setDefaults(Notification.DEFAULT_ALL); Notification notification = builder.build(); notificationManager.notify(123, notification);

    第一个具有点击提示有跳转功能,后面一个没有跳转功能,只是提示作用

    以下借鉴其他博主的总结:

     在不同的版本下Notification使用有一些不同,涉及到改成Builder的使用,现在网上大多数资料还是API Level 11版本前的用法介绍,如果不熟悉的话,会绕一些弯路。
        现在总结如下,希望对以后使用的程序员有所帮助。
        低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。前面的有关属性设置这里就不再提了,网上资料很多。

    Intent  intent = new Intent(this,MainActivity);  
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);  
    notification.setLatestEventInfo(context, title, message, pendingIntent);          
    manager.notify(id, notification);  

        高于API Level 11,低于API Level 16 (Android 4.1.2)版本的系统中,可使用Notification.Builder来构造函数。但要使用getNotification()来使notification实现。此时,前面版本在notification中设置的Flags,icon等属性都已经无效,要在builder里面设置。
    Notification.Builder builder = new Notification.Builder(context)  
                .setAutoCancel(true)  
                .setContentTitle("title")  
                .setContentText("describe")  
                .setContentIntent(pendingIntent)  
                .setSmallIcon(R.drawable.ic_launcher)  
                .setWhen(System.currentTimeMillis())  
                .setOngoing(true);  
    notification=builder.getNotification();  

        高于API Level 16的版本,就可以用Builder和build()函数来配套的方便使用notification了。
    Notification notification = new Notification.Builder(context)    
             .setAutoCancel(true)    
             .setContentTitle("title")    
             .setContentText("describe")    
             .setContentIntent(pendingIntent)    
             .setSmallIcon(R.drawable.ic_launcher)    
             .setWhen(System.currentTimeMillis())    
             .build();   
     

        【注意点】:
        在构造notification的时候有很多种写法,但是要注意,用
    Notification notification = new Notification();

    这种构建方法的时候,一定要加上notification.icon这个设置,不然,程序虽然不会报错,但是会没有效果。

     ======================================================================

    实际代码如下: 

    服务代码

    TimerService.class
    package com.adisoon.appservicedemo;

    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.os.IBinder;
    import android.support.annotation.Nullable;

    import java.util.Timer;
    import java.util.TimerTask;

    /**
    * 延迟1秒在标题栏显示通知
    * Created by nimorl on 2017-10-19.
    */

    public class TimerService extends Service {
    private Timer timer;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
    return null;
    }

    @Override
    public void onCreate() {
    super.onCreate();
    timer = new Timer(true);
    }

    @Override
    public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);

    timer.schedule(new TimerTask() {
    @Override
    public void run() {
    String ns = Context.NOTIFICATION_SERVICE;

    //获得通知管理器
    NotificationManager manager = (NotificationManager) getSystemService(ns);

    Notification.Builder builder = new Notification.Builder(getApplicationContext());
    builder.setSmallIcon(R.drawable.warning);
    builder.setTicker("显示第一个通知");
    builder.setContentTitle("第一个通知");
    builder.setContentText("有病毒正在删除你的文件");
    builder.setWhen(System.currentTimeMillis()); //设置时间
    Notification notification = builder.build();

    //定义通知行为
    manager.notify(0,notification);
    TimerService.this.stopSelf();

    }
    },6000);
    }
    }

    主界面调用


    startService(new Intent(this,TimerService.class));
  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/nimorl/p/7692718.html
Copyright © 2011-2022 走看看