RemoteView类
RemoteView描述一个view,而这个view是在另一个进程显示的。需要用布局解析器布局资源文件。并且提供了可以修改View内容的一些简单基础的操作。
RemoteView是用来描述一个跨进程显示的view,Android的通知是全局的、跨进程的,由于自定义的Notification和显示Notification是两个不同的进程。因此,自定义的Notification必须通过RemoteView才能显示。
public RemoteViews(String packageName,int layoutId)
作用:创建RemoteViews对象
packageName : 当前组件所在包的包名
layoutId :布局资源索引值
示例:
RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification);
notification.xml是自定义的布局文件
步骤6:接上篇文章的第5步:
RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.notification);
步骤7:设置通知的显示样式:
notification.contentView = contentView;
步骤8:发送通知
mNotiManager.notify(R.id.btn_show,notification);
案例:通知栏更新进度条。
package com.example.test_notification;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RemoteViews;
import android.widget.Toast;
public class MainActivity2 extends Activity implements OnClickListener {
NotificationManager mNotiManager;// 通知管理器
Notification mNoti;// 通知
Handler mHandler;// 处理消息
private final int PROGRESS_MAX = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
Button btnShow = (Button) findViewById(R.id.btn_show);
btnShow.setOnClickListener(this);
mNotiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
mNoti.contentView.setProgressBar(R.id.progressBar1,
PROGRESS_MAX, msg.what, false);
Log.i("TAG", "progress=" + msg.what);
// 发送新的通知
mNotiManager.notify(R.id.btn_show, mNoti);
if (msg.what == PROGRESS_MAX) {
Toast.makeText(MainActivity2.this, "下载完成,请查看安装",
Toast.LENGTH_LONG).show();
}
};
};
}
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.btn_show:
showNotify();
upgrade();
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void upgrade() {
new Thread() {
@Override
public void run() {
for (int i = 0; i <= PROGRESS_MAX; i++) {
mHandler.sendEmptyMessage(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
private void showNotify() {
try {
// 创建通知对象
mNoti = new Notification(R.drawable.icon, "又来通知了哈哈",
System.currentTimeMillis());
mNoti.defaults |= Notification.DEFAULT_LIGHTS;
mNoti.defaults |= Notification.DEFAULT_VIBRATE;
mNoti.vibrate =new long[]{0,100,200,300};
Intent intent = new Intent(this, MainActivity2.class);
// 设置随时更新(第四个参数)
PendingIntent pIntent = PendingIntent.getActivity(this, 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// 设置通知不可删除
mNoti.flags = Notification.FLAG_ONGOING_EVENT;
mNoti.contentIntent = pIntent;
// 定义闪光灯
// 路灯显示300毫秒然后关闭一分钟。如果设备不支持制定的颜色,则会按照最近的颜色显示。
mNoti.ledARGB = 0xff00ff00;
mNoti.ledOnMS = 300;
mNoti.ledOffMS = 1000;
mNoti.flags |= Notification.FLAG_SHOW_LIGHTS;
// 自定义通知中显示的布局
RemoteViews contentView = new RemoteViews(getPackageName(),
R.layout.dialog);
// 设置通知的显示样式
mNoti.contentView = contentView;
// 设置当前的进度之为1,即整个进度值的10%
mNoti.contentView.setProgressBar(R.id.progressBar1, PROGRESS_MAX,
1, false);
// 发送通知
mNotiManager.notify(R.id.btn_show, mNoti);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
"安卓Android源码——notification1.rar"这个压缩包很可能包含了Android系统中关于通知机制的源代码,帮助开发者深入理解其工作原理。 通知在Android中的实现涉及到多个组件和接口,主要包括以下几个关键知识点: ...
3. Notification:创建通知对象,设置标题、内容和图标,当提醒触发时,通过NotificationManager发送通知,提醒用户查看记事。 通过以上技术,我们可以构建一个功能完善的自定义日历应用,不仅提供美观的界面,还能...
本文将深入解析如何通过Android源码实现一个通知栏常驻的Notification。 首先,我们需要理解Notification的工作原理。在Android系统中,Notification是由`NotificationManager`服务管理的,开发者通过`Notification...
博客《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/44781557
10. **自定义通知渠道**:从Android 8.0(API 26)开始,应用需要为每个类型的通知创建自定义渠道。这允许用户针对不同类型的提醒进行精细化控制。 通过对这些源码的分析,开发者不仅可以理解下拉通知的工作流程,...
本文将深入解析"安卓Android源码——下拉通知效果源码.zip"中的关键知识点,帮助开发者理解如何实现类似的功能。 首先,我们要知道在Android中,通知是由Notification类表示的。开发者可以通过创建Notification对象...
5. **通知与提醒**:Android的Notification API用于在特定时间提醒用户,可能结合AlarmManager来设置定时任务。 6. **权限管理**:由于Android的权限系统,开发者需要处理读写日历的相关权限请求。 7. **版本兼容...
总结来说,“Android Push Notification Service Demo”旨在演示如何集成FCM服务,注册设备,构建和发送推送消息,以及自定义通知的展示和交互。开发者可以通过分析和运行example1中的代码,学习到完整的推送通知...
通过参考提供的博客链接——,我们可以深入理解Android通知的用法和兼容性问题。 首先,从Android 8.0(API级别26)开始,通知渠道(Notification Channel)被引入,这是为了提升用户体验和控制应用的通知权限。...
3. **通知推送**:为了实现通知功能,应用可能使用了Android的Notification API,用户即使不在应用内也能收到新通知。 4. **网络通信**:通知数据可能从服务器获取,这涉及到网络请求的实现,如使用Retrofit、...
- 通知与提醒:利用Android的`AlarmManager`配合`BroadcastReceiver`和`Notification`,为用户设定的事件设置提醒。 4. **权限管理**: - 在AndroidManifest.xml中声明所需的权限,如读写日历权限(READ_CALENDAR...
2. **自定义通知**: - **自定义布局**:通过提供自定义的远程视图(RemoteViews)可以更改通知的显示样式。这通常用于创建复杂的布局,如包含多个图像或自定义UI元素的通知。 - **通知徽章**:可以为应用图标添加...
这个"Android源码——闹钟源代码.zip"文件可能包含了Android系统闹钟应用(DeskClock)的源代码,以及相关的图片资源。通过对这些源代码的学习和分析,我们可以深入了解Android系统如何实现闹钟功能。 首先,`...
这个“安卓消息推送通知栏相关-android通知入门小例子”是一个针对Android通知栏功能的学习资源,它包含了一个简单的通知示例项目——NotificationDemo。这个压缩包可能包含了源代码、文档以及链接,帮助开发者理解...
5. **通知(Notification)**:为了在后台播放音乐,jamendo应用会使用通知来显示当前播放的歌曲,并提供控制按钮,使用户能在通知栏进行播放控制。 6. **多媒体框架(Media Framework)**:jamendo会利用Android的...
9. **通知和对话框**:Notification用于在状态栏显示消息,AlertDialog则提供了一种与用户交互的方式。Demo可能包含如何创建和使用这些组件的实例。 10. **事件总线**:一些高级示例可能涉及事件总线框架(如...
3. **Notification**:SMSPopup的核心是快速通知,这涉及到Android的Notification API。开发者需要知道如何创建、更新和取消通知,以及如何设置通知的样式和行为。 4. **PopupWindow**:为了实现弹出效果,应用使用...
开发者可能需要使用`Notification`类来创建和更新这个通知。 9. **多媒体播放与控制**: - 通话过程中的扬声器和静音功能可能涉及到了多媒体音频的播放控制,需要使用到`AudioManager`类。 10. **状态栏和导航栏...
- **内容概述**: 文章深入介绍了Android中几种常见的通知方式——Toast、Notification和Alarm的工作原理及使用方法,并给出了具体的代码示例。 **9. NotificationManagerandNotification学习笔记** - **链接**: ...