Android学习——状态栏通知

本文介绍了如何在Android应用中创建和销毁状态栏通知,包括布局文件、Java代码实现及清单文件添加震动权限,以及通知的多种配置方式,如动态获取路径、使用Notification.Builder类构建通知,以及Intent与PendingIntent的区别。

1. 状态栏通知
Notification即通知,用于在通知栏显示提示信息。
在布局文件中添加“创建”和“销毁”两个Button:

 <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="58dp"
        android:layout_marginTop="24dp"
        android:text="创建" 
        android:onClick="create"/>

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginTop="39dp"
        android:text="销毁" 
        android:onClick="destroy"/>

在java文件中添加单击事件:

public class MainActivity extends Activity {
    //状态栏通知管理器
    private NotificationManager manager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取系统服务——状态栏通知管理者,API 11以下
        manager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE);
    }

    public void create(View v) {
        // 创建通知
        Notification notification = new Notification(R.drawable.ic_launcher, "10086欠费提醒", System.currentTimeMillis());
        //创建跳转界面
        Intent intent = new Intent(this,NewActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);       
        // 设置最新事件,API 11以下
        notification.setLatestEventInfo(this, "10086来信", "欠费1毛。。。", pendingIntent);
        //设置自动退出
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        //设置默认提示音  
        notification.defaults |= Notification.DEFAULT_SOUND;
        //设置震动
        notification.defaults |= Notification.DEFAULT_VIBRATE;  
        //设置通知
        manager.notify(123, notification);
    }

    public void destroy(View v) {
        manager.cancel(123);
    }
}

在清单文件中添加震动权限:

<uses-permission android:name="android.permission.VIBRATE"/>

API 11及以上版本是通过Notification.Builder类来实现:

public void create(View v) {    
        //动态获取 sdcard的路径
        String sdcard_path = Environment.getExternalStorageDirectory().getAbsolutePath();
        //uri
        Uri uri = Uri.parse(sdcard_path+"/aa.mp3");
        //创建跳转界面
        Intent intent = new Intent(this,NewActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);   
        //位图
        Bitmap bm = BitmapFactory.decodeResource(this.getResources(),R.drawable.a);     
        //构造者,静态内部类
        Notification.Builder builder = new Notification.Builder(MainActivity.this);
        //构建链
        builder.setAutoCancel(true)//设置是否自动取消
                .setWhen(System.currentTimeMillis())//设置什么时候显示通知
                .setSmallIcon(R.drawable.ic_launcher)//设置小图标
                .setSound(uri)                    //设置来自sd卡的提示音
                .setVibrate(new long[]{300,400,500})//设置震动300ms,隔400ms,再震动500ms
                .setContentTitle("Title:10086来信")
                .setContentText("Text:欠费1毛。。。赶紧缴费去")
                .setContentInfo("Info:10086账单")
                .setContentIntent(pendingIntent)
                .setTicker("10086发来贺电");                
        Notification notification = builder.getNotification();//API11以上,API 16一下
//      Notification notification = builder.build();//API 16及以上
        manager.notify(123, notification);
    }

运行界面:
这里写图片描述
点击“弹出2”:
这里写图片描述
区别:Intent与PendingIntent
Intent立即跳转
PendingIntent延迟跳转
PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);

说明:window - - >showview- ->other– >android– > file exploer 查看模拟器文件
sdcard是storage/sdcard的快捷方式
区别:URL与URI
URI:本地或网络地址
URL:网络地址

2. 省略强转
Button button = (Button)findViewById(resId);每次用都需要强制类型转换,如果控件特别多的情况下会很麻烦。现在介绍以下两种解决方法:
方法一:泛型
ViewUtils工具类,通过泛型,省略强转

public class ViewUtils {
    private Activity activity;
    public ViewUtils(Activity activity) {
        this.activity = activity;
    }
    public <E extends View> E findView(int resId){
        return (E) this.activity.findViewById(resId);
    }
}

调用:

btn = new ViewUtils(this).findView(R.id.btn1);  
        btn.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {
                Toast.makeText(NewActivity.this, btn.getText().toString(), 0).show();

            }
        });

方法二:注解
butterknife
(1)把jar包放在工程的libs下:
这里写图片描述
(2)配置是注解生效
右击工程- - >Properties- ->Java Compiler - ->Annotation Processing- ->勾上Enable project specific settings– >Factory Path- ->Enable project specific settings- ->Add JARs- ->当前工程的ibs中的bufferknife-7.0.1.jar
这里写图片描述
(3)通过注解的方式声明变量:

    @Bind(R.id.btn1)
    Button btn;
    @Bind(R.id.textView1)
    TextView tv;

(4) 通过ButterKnife绑定:

ButterKnife.bind(this);
//添加监听
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值