Android笔记:Notification的使用总结

当前位置:首页 » 笔记
In 学习, 笔记  @2015-08-19

关于Android通知栏Notification使用的总结。

重点知识点:

  • 使用Notification.builder类的系列set方法设置通知栏的参数;
  • setContentIntent()方法添加PendingIntent达到点击启动Activity的功能。
  • 调用builder.build()方法返回一个notification对象;
  • 然后利用notification的一些属性设置它的声音,震动,灯光,点击关闭等等特性。
    Android通知栏Notification使用的总结

notification点击后消失两种方法:

  1. 在点击启动的新Activity中调用notificationManager.cancel();
  2. 给notification.flags = Notification.FLAG_AUTO_CANCEL;

notification常驻状态栏的两个flag

  1. FLAG_ONGOING_EVENT //提示用户程序正在运行,如正在通话……
  2. FLAG_NO_CLEAR //clear按钮将无法清除这个notification

案例代码:

package com.m1910.notificationtest;

import android.annotation.SuppressLint;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    private Button sendNotice;
    String tickerText = "This is ticker text.";
    String contentTitle = "This is content title.";
    String contentText = "This is content Text.";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sendNotice = (Button) findViewById(R.id.send_notice);
        sendNotice.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.send_notice:
            // 实例化一个NotificationManager对象。
            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            // 创建intent用来启动NotificationActivity
            Intent intent = new Intent(this, NotificationActivity.class);
            // 将intent传入到PendingIntent对象中用getActivity()方法实例化一个PendingIntent对象。
            // 这里还可以使用getService()以及getBroadcast()方法,传入的参数一样。
            PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
            // 实例化一个Builder对象。
            Notification.Builder nBuilder = new Notification.Builder(this);
            // 利用Builder对象的一系列set方法设置参数,其中注意使用setContentIntent()传入上面的PendingIntent对象pi;
            // builder()方法返回一个Notification对象
            Notification notification = nBuilder.setContentTitle(contentTitle).setContentText(contentText)
                    .setTicker(tickerText).setSmallIcon(R.drawable.ic_launcher).setContentIntent(pi).build();
            // 设置提示音
            notification.defaults = Notification.DEFAULT_SOUND;
            // 设置点击后自动清除通知
            notification.flags = Notification.FLAG_AUTO_CANCEL;
            // 调用NotificationManager的notify()方法启动这个notification;
            // 第一个参数APP中这个notification唯一标识符,第二个是要显示的Notification对象。
            manager.notify(1, notification);
            break;
        default:
            break;
        }
    }
}

Notification进阶部分:

  1. 如网易云音乐那样的可操作的通知栏需要用到相对比较复杂的布局使用Notification.BuildersetContent(RemoteViews views)设置自定义布局,暂时还没做过;
  2. android4.1之后,有小布局,大布局,下滑后的通知栏,选中的状态栏,以及锁屏状态的通告,这些都是可以深入研究的方向。
  3. 前台服务的使用,创建服务的时候调用startForeground()方法启动notification,让服务在状态栏常驻。
标签: , , , ,   评论: 8枚 

Android编程遇到的小问题20150819

当前位置:首页 » 笔记
In 学习, 笔记  @2015-08-18

问题一:
代码:

notification = new Notification.Builder(ctx)
                .setContentTitle("Title").setContentText("Text")
                .setSmallIcon(R.drawable.ic_launcher).build();

提示错误:

Call requires API level 16 (current min is 14): android.app.Notification.Builder#build

原因见文档:
public Notification build ()
Combine all of the options that have been set and return a new Notification object.
Added in API level 16
Notification 的 build ()方法是在API level 16才有的;
而我的适配版本是API level 14,需要使用getNotification ()才行。

问题二:
adb服务出现异常,如果想手工关闭adb服务,可以使用下面的命令:

关闭adb服务命令:adb kill-server
启动adb服务命令:adb start-server

问题三:
eclipse下按alt+/快捷键无代码提示故障:
也不知道为啥会出现这个问题,我的情况解决方法如下:
Window – Preferences – General – Keys
1/Restore Defaults恢复默认设置;
2/把word completion的快捷键设置alt+C
3/把Content Assist的快捷键由ctrl+space改成alt+/
4/window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾;

标签: , ,   评论: 2枚 

Android中UI的单位dp,sp和px使用问题

当前位置:首页 » 笔记
In 学习, 笔记  @2015-08-06

首先我看到这一些单位有点恍惚,之前接触过的就是px像素单位,为了适配不同分辨率的屏幕,Android建议使用dp(dip)作为除文字意外的组件的尺寸单位,文字的就用sp。
屏幕像素密度(ppi)计算:ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数;
如800×480的4英寸屏幕的ppi = √800²+480² / 4 = 233ppi。

dp与px换算:
px = dp*ppi/160
dp = px / (ppi / 160)

sp与px换算
px = sp*ppi/160
sp = px / (ppi / 160)

现在市场比较常用的屏幕分辨率:
800×480(854×480)
1280×720(1280×768,1280×800)
1920×1080
截至2015年6月Android设备分辨率趋势
(以上统计来自友盟指数
多屏幕适配的3条原则:
1) 设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。
2) 在程序的代码中不要出现具体的像素值,在dimens.xml中定义;
3) 对不同的屏幕提供合适大小的图片。

屏幕适配的注意事项:
1.AndroidManifest.xml设置
android:anyDensity=”true”时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。
相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源:
1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源;
2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理;
3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。

2.横屏竖屏目录区分
1) drawable
a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;
b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源;
c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。
2) layout
在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

3.使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。
“上、左”定义可拉伸区域
“右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。

4.不同的layout
Android手机屏幕大小不一,有480×320, 640×360, 800×480……怎样才能让Application自动适应不同的屏幕呢?其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640×360、layout-800×480……所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

参考:
http://blog.csdn.net/guozh/article/details/8954994
http://blog.csdn.net/jdsjlzx/article/details/45891551
http://www.cnblogs.com/zhwl/archive/2013/06/12/3132722.html
http://www.cnblogs.com/bluestorm/p/3640786.html

标签: , , , , ,   评论: Android中UI的单位dp,sp和px使用问题已关闭评论