2019独角兽企业重金招聘Python工程师标准>>>

在接下来的例子中,EarthquakeService将为每个新的地震触发一个Notification。显示状态条图标的同时,在扩展的状态窗口中显示地震的级别和位置,选择它将会打开Earthquake Activity。

1. 在EarthquakeService中,创建一个新的Notification实例变量来储存Notification对象,用于控制状态条图标和扩展的状态窗口中项目的细节。

Java代码:
privateNotificationnewEarthquakeNotification;
publicstaticfinalintNOTIFICATION_ID=1;

2. 扩展onCreate方法来创建Notification对象。
java代码:
@Override
publicvoidonCreate(){
updateTimer=newTimer(“earthquakeUpdates”);
inticon=R.drawable.icon;
StringtickerText=“NewEarthquakeDetected”;
longwhen=System.currentTimeMillis();
newEarthquakeNotification=newNotification(icon,tickerText,when);
}

3. 现在,扩展annouceNewQuake方法,在每个新的地震数据添加到ContentProvider之后触发Notification。在初始化Notification之前,使用setLastestEventInfo方法来更新扩展的信息。
java代码:
privatevoidannounceNewQuake(Quakequake){
StringsvcName=Context.NOTIFICATION_SERVICE;
NotificationManagernotificationManager;
notificationManager=(NotificationManager)getSystemService(svcName);

Contextcontext=getApplicationContext();
StringexpandedText=quake.getDate().toString();
StringexpandedTitle=“M:”+quake.getMagnitude()+““+quake.getDetails();
IntentstartActivityIntent=newIntent(this,Earthquake.class);
PendingIntentlaunchIntent=PendingIntent.getActivity(context,0,startActivityIntent,0);
newEarthquakeNotification.setLatestEventInfo(context,expandedTitle,expandedText,launchIntent);
newEarthquakeNotification.when=java.lang.System.currentTimeMillis();
notificationManager.notify(NOTIFICATION_ID,newEarthquakeNotification);

Intentintent=newIntent(NEW_EARTHQUAKE_FOUND);
intent.putExtra(“date”,quake.getDate().getTime());
intent.putExtra(“details”,quake.getDetails());
intent.putExtra(“longitude”,quake.getLocation().getLongitude());
intent.putExtra(“latitude”,quake.getLocation().getLatitude());
intent.putExtra(“magnitude”,quake.getMagnitude());

sendBroadcast(intent);
}

4. 最后一步是在两个Activity类中清除Notification。当应用程序活跃时,通过移除状态图标来完成。4.1. 在Earthquake Activity中,修改onCreate方法,获取NotificationManager的一个引用。
java代码:
NotificationManagernotificationManager;
@Override
publicvoidonCreate(Bundleicicle){
[...existingonCreate...]
StringsvcName=Context.NOTIFICATION_SERVICE;
notificationManager=(NotificationManager)getSystemService(svcName);
}

4.2. 修改EarthquakeReceiver的onReceive方法。当这个方法执行时,正好是Activity活跃的时候,你可以在这里安全的取消所有的地震Notification。
java代码:
@Override
publicvoidonReceive(Contextcontext,Intentintent){
loadQuakesFromProvider();
notificationManager.cancel(EarthquakeService.NOTIFICATION_ID);
}

4.3. 接下来,扩展onResume方法来取消Notification。
java代码: 
@Override
publicvoidonResume(){
notificationManager.cancel(EarthquakeService.NOTIFICATION_ID);
IntentFilterfilter;
filter=newIntentFilter(EarthquakeService.NEW_EARTHQUAKE_FOUND);
receiver=newEarthquakeReceiver();
registerReceiver(receiver,filter);
super.onResume();
}

4.4. 在EarthquakeMap Activity中重复相同的过程。
java代码:
NotificationManagernotificationManager;
@Override
publicvoidonCreate(Bundleicicle){
super.onCreate(icicle);
setContentView(R.layout.earthquake_map);
ContentResolvercr=getContentResolver();
earthquakeCursor=cr.query(EarthquakeProvider.CONTENT_URI,null,null,null,null);
MapViewearthquakeMap=(MapView)findViewById(R.id.map_view);
earthquakeMap.getOverlays().add(newEarthquakeOverlay(earthquakeCursor));
StringsvcName=Context.NOTIFICATION_SERVICE;
notificationManager=(NotificationManager)getSystemService(svcName);
}

@Override
publicvoidonResume(){
notificationManager.cancel(EarthquakeService.NOTIFICATION_ID);
earthquakeCursor.requery();
IntentFilterfilter;
filter=newIntentFilter(EarthquakeService.NEW_EARTHQUAKE_FOUND);
receiver=newEarthquakeReceiver();
registerReceiver(receiver,filter);
super.onResume();
}

publicclassEarthquakeReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentintent){
notificationManager.cancel(EarthquakeService.NOTIFICATION_ID);
earthquakeCursor.requery();
MapViewearthquakeMap=(MapView)findViewById(R.id.map_view);
earthquakeMap.invalidate();
}
}

转载于:https://my.oschina.net/microoh/blog/144958

Android 给地震监视器添加Notification相关推荐

  1. 给地震监视器添加Notification

    在接下来的例子中,EarthquakeService将为每个新的地震触发一个Notification.显示状态条图标的同时,在扩展的状态窗口中显示地震的级别和位置,选择它将会打开Earthquake ...

  2. Android系统中如何添加USB网络共享

    Android系统中如何添加USB网络共享 类别 需求 索引类别 USB网络共享 问题描述 平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享 ...

  3. Android 9 系统设置中添加以太网开关按钮

    Android 9 系统设置中添加以太网开关按钮 本章突出新手可以简单快速实现该需求.(具体以太网流程自行百度) 首先在系统Settings设置选项中添加选项.(该部分逻辑以及如何在获取设置按钮的开关 ...

  4. android 为桌面图标添加数字角标

    android 为桌面图标添加数字角标 我的github项目 BadgeForAppIcon 看完麻烦 star 一下 在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字角标的需求.作为 ...

  5. android notification 定时显示,Android编程使用Service实现Notification定时发送功能示例...

    本文实例讲述了android编程使用service实现notification定时发送功能.分享给大家供大家参考,具体如下: /** * 通过启动或停止服务来管理通知功能 * * @descripti ...

  6. Android开发学习之路--Notification之初体验

    一般当我们收到短信啊,微信啊,或者有些app的提醒.我们都会在通知栏收到一天简单的消息,然后点击消息进入到app里面,事实上android中有专门的Notification的类能够完毕这个工作,这里就 ...

  7. Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现

    Android 图片合成:添加蒙板效果 不规则相框 透明度渐变效果的实现 暂时还未有时间开发这效果,所以先贴出来. 先贴一张效果图,这是一张手机截屏: 左上方的风景图:背景图片 右上方的人物图:前景图 ...

  8. android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...

    本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...

  9. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库) 原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添 ...

最新文章

  1. Xcode 6 UITextField 键盘不弹出
  2. vue打包后axios返回html,vue项目封装axios并访问接口
  3. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
  4. asp.net MVC发布iis无法加载css,js和图片
  5. java range(10)_Java Year range()用法及代码示例
  6. ArcGIS 空间查询一例
  7. python滚动条_python中selenium操作下拉滚动条的几种方法汇总
  8. 经典C语言程序100例之四八
  9. 【2010福建】收稻子 (校BSOJ1114)
  10. m.2接口和nvme区别_透明款散热不好,那么ORICO 全铝NVMe固态硬盘盒了解一下?
  11. [转]毕业5年决定你的命运 --------值得所有不甘平庸的人看看
  12. easyui(一) 初始easyui
  13. C#中的interface
  14. 高职计算机专业用什么软件,【计算机专业论文】高职计算机专业CAD软件教学思考(共4772字)...
  15. android shape.xml 属性详解
  16. python 为什么只执行一次_python只执行一次
  17. coupled quasi-harmonic bases
  18. 给spring容器注册组件
  19. 换硬币-零钱换成5分、2分和1分的硬币
  20. 高德地图Amap常用功能总结

热门文章

  1. 使用Office Tool Plus Beta版安装Office2021
  2. Windows 自启动文件夹
  3. Linux面试题完整修订附加答案
  4. 利用计算机解决实际问题,计算机程序可以解决哪些实际问题
  5. 您可能不知道WooCommerce可以做的10件事
  6. python淘宝爬虫登陆功能和下单功能_Python 爬虫实战5 模拟登录淘宝并获取所有订单...
  7. win10双显示器,不论设置1还是2为主显示器,背景中,右键只显示“为监视器2设置”?
  8. 8个方法让你游戏防封
  9. mysql 时间 本周 本月_日本人脑洞最大的奇葩恋爱游戏,本周上架Steam,别在吃饭时玩...
  10. python制作一个网易音乐下载器