xml里
<ProgressBar
android:id="@+id/content_view_progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"
android:layout_below="@id/content_view_image"
/>
代码里
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 0:
notif.contentView.setProgressBar(R.id.content_view_progress, 100, len, false);
manager.notify(0, notif);
break;
case 1:
Toast.makeText(TestAndroid4Activity.this, "下载完成", 0).show();
break;
default:
break;
}
}
};
方法
private class DownLoadThread extends Thread{
private Timer timer = new Timer();
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
timer.schele(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message msg = new Message();
msg.what = 0;
msg.obj = len;
handler.sendMessage(msg);
if(len == 100){
timer.cancel();
handler.sendEmptyMessage(1);
}
}
}, 0, 1000);
len = 0;
try {
while(len < 100){
len++;
Thread.sleep(1000);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
⑵ Android通知栏详解
可以看到,Android通知栏默认是标题显示一行,内容显示一行,对于一行显示不完的,用省略号代替。
这是常见的通知栏的样式,不再赘述。
在不同的手机上,只设置builder.setSmallIcon(R.drawable.ic_launcher)表现可能不一致,在华为P9上不会显示大的icon,只会显示小的icon。但是在魅族上却显示了,显示的应该是应用的默认图标。
所以建议还是设置
与上面的显示多行文本类似,也是在Android4.1中官方推出的Notification.BigPictureStyle。
使用方式也相同
是因为在用户还没有划出通知栏的时候需要提醒用户收到通知,所以需要显示smallIcon。
⑶ Android service 发送通知栏消息!急急急。
http://www.cnblogs.com/xiao-xu/p/3216491.html
可以先看看
⑷ 如何实现Android的消息的通知栏
IntentFilter filter = new IntentFilter();
// 为IntentFilter添加一个Action
filter.addAction(action);
registerReceiver(receiver, filter);
PendingIntent pendingIntent3 = PendingIntent.getActivity(getApplicationContext(), 0,
new Intent(getApplicationContext(), MainActivity.class), 0);
// 通过Notification.Builder来创建通知,注意API Level
// API16之后才支持
Notification notify3 = new Notification.Builder(getApplicationContext())
.setSmallIcon(R.drawable.logo1028)
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.app_running))
.setContentIntent(pendingIntent3).build(); // 需要注意build()是在API
// level16及之后增加的,API11可以使用getNotificatin()来替代
notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。
// manager.notify(1, notify3);// 步骤4:通过通知管理器来发起通知。如果id不同,则每click,在status哪里增加一个提示
startForeground(1, notify3);
⑸ android 通知栏转跳页面问题
那你得判断是从哪进这个A页面的,如果是从通知栏进入的那就弹dialog。也就是你得告诉A页面什么时候需要弹什么时候不弹,在通知栏跳到A页面的时候加个标识就行了。
⑹ android消息推送怎么实现
极光推送可以轻松实现android消息推送。具有操作步骤如下:⑺ android 自定义通知栏
Notification 参数使用 参考:
http://www.cnblogs.com/kexing/p/8371051.html
自定义通知栏
仅支持FrameLayout、LinearLayout、RelativeLayout三种布局控件
AnalogClock、Chronometer、Button、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView和AdapterViewFlipper这些显示控件
否则会引起ClassNotFoundException异常。
流程:点击通知栏 发送广播 app接收广播做相应处理:
为通知栏绑定广播事件:
1.FLAG_CANCEL_CURRENT:如果AlarmManager管理的PendingIntent已经存在,那么将会取消当前的PendingIntent,从而创建一个新的PendingIntent.
2.FLAG_UPDATE_CURRENT:如果AlarmManager管理的PendingIntent已经存在,让新的Intent更新之前Intent对象数据,例如更新Intent中的Extras,另外,我们也可以在PendingIntent的原进程中调用PendingIntent的cancel ()把其从系统中移除掉
3.FLAG_NO_CREATE:如果AlarmManager管理的PendingIntent已经存在,那么将不进行任何操作,直接返回已经.
4.FLAG_ONE_SHOT:该PendingIntent只作用一次.在该PendingIntent对象通过send()方法触发过后,PendingIntent将自动调用cancel()进行销毁,那么如果你再调用send()方法的话,系统将会返回一个SendIntentException.
添加广播接收:
AndroidManifest:
⑻ Android通知笔记
当我们自定义通知布局的时候,需要通过 NotificationCompat.Builder 设置自定义的 RemoteViews 。而 RemoteViews 中只支持部分布局和控件。如下所示。
布局
控件
注意:上面的信息我是在android-29的 RemoteViews 源码中看到的,其他版本的像
android-26,android-27都没看到,感觉很奇怪。
在上面说通过 NotificationCompat.Builder 设置自定义的 RemoteViews 。有两个方法。
设置通知收起状态RemoteViews
设置通知展开状态的RemoteViews
下面看一下网易云和喜马拉雅通知布局的对比。
通知栏网易云展开布局,喜马拉雅收起布局
通知栏网易云展开布局,喜马拉雅展开布局
通知栏喜马拉雅展开布局,网易云收起布局
通知栏喜马拉雅展开布局,网易云展开布局
在官方的 创建自定义通知布局 中有这么一段话。“ 自定义通知布局的可用高度取决于通知视图。 通常情况下 ,收起后的视图布局的高度上限为 64 dp,展开后的视图布局的高度上限为 256 dp ”。
对这段话我的理解是:
接下来我们测试一下,测试机器
收起布局效果
展开布局效果
收起布局效果
展开布局效果
到这里,有个疑问,如果收起布局大于64dp,展开布局大于256dp会是什么效果呢?接续测试一下。
收起布局效果
展开布局效果
在我的测试机上好像也没什么问题,就是我们的通知布局占据的高度变大了。
结论:可以自定义通知栏高度,但是无论是收起布局还是展开布局都不宜过大。过大的话,会导致用户在通知栏看到的通知数量减少,用户需要滑动才能看到更多的通知信息,影响用户体验。
源码请参考 NotificationDemo 的CustomizeNotificationActivity。
这个需要在手机中设置。
参考链接:
⑼ android8.0之悬浮窗和通知栏
悬浮窗:
使用场景:例如微信在视频的时候,点击Home键,视频小窗口仍然会在屏幕上显示;
注意事项:
1、一般需要在后台进行操作的时候才需要悬浮窗,这样悬浮窗才有意义;
2、API Level >= 23的时候,需要在AndroidManefest.xml文件中声明权限SYSTEM_ALERT_WINDOW才能在其他应用上绘制控件。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />;除了这个权限外,我们还需要在系统设置里面对本应用进行设置悬浮窗权限。该权限在应用中需要启动Settings.ACTION_MANAGE_OVERLAY_PERMISSION来让用户手动设置权限:startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), REQUEST_CODE);
3、LayoutParam设置:LayoutParam里的type变量。这个变量是用来指定窗口类型的。在设置这个变量时,需要注意一个坑,那就是需要对不同版本的Android系统进行适配。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
};在Android 8.0之前,悬浮窗口设置可以为TYPE_PHONE,这种类型是用于提供用户交互操作的非应用窗口。
而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限的应用无法再使用一下窗口类型来在其他应用和窗口上方显示提醒窗口:
- TYPE_PHONE
- TYPE_PRIORITY_PHONE
- TYPE_SYSTEM_ALERT
- TYPE_SYSTEM_OVERLAY
- TYPE_SYSTEM_ERROR
如果需要实现在其他应用和窗口上方显示提醒窗口,那么必须该为TYPE_APPLICATION_OVERLAY的新类型;
如果在Android 8.0以上版本仍然使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息:
android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@f8ec928 -- permission denied for window type 2002;
具体实现:
1、Activity:
public void startFloatingService(View view) {
...
if (!Settings.canDrawOverlays(this)) {
Toast.makeText(this, "当前无权限,请授权", Toast.LENGTH_SHORT);
startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), 0);
} else {
startService(new Intent(MainActivity.this, FloatingService.class));
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if (!Settings.canDrawOverlays(this)) {
Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
startService(new Intent(MainActivity.this, FloatingService.class));
}
}
}
2、service:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
showFloatingWindow();
return super.onStartCommand(intent, flags, startId);
}
private void showFloatingWindow() {
if (Settings.canDrawOverlays(this)) {
// 获取WindowManager服务
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 新建悬浮窗控件
Button button = new Button(getApplicationContext());
button.setText("Floating Window");
button.setBackgroundColor(Color.BLUE);
// 设置LayoutParam
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
layoutParams.format = PixelFormat.RGBA_8888;
layoutParams.width = 500;
layoutParams.height = 100;
layoutParams.x = 300;
layoutParams.y = 300;
// 将悬浮窗控件添加到WindowManager
windowManager.addView(button, layoutParams);
}
}
效果展示:
⑽ android 系统源码修改 去除下拉菜单,底部菜单
android手机系统的顶部,点击菜单栏时,会有一个可以下拉的下拉菜单,,,其实就是他的下拉通知栏,,怎么实现这个下拉的功能
没分了 见谅