zoukankan      html  css  js  c++  java
  • 安卓学习-界面-ui-Notification

    通知

    setDefaults(): 这只通知LED等、音乐、震动等

    setAutoCancle():点击通知后,是否自动消失

    setContentTitle():通知内容标题

    setContentText():通知内容

    setSmailIcom():通知小图标

    SetLargeIcon():通知大图标

    setTick():通知状态栏提示信息

    setContentIntent():双击后运行的Intent

    直接上例子,第一个简单点,就一个提示信息,点击后调用一个页面

    第二个显示一个下载的提示信息,带进度

    例子1

    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发送通知" />
    
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭通知" />
    
    </LinearLayout>
    View Code

    MainActivity.java

    public class MainActivity extends Activity {
    
        NotificationManager nm;
        Button btn1;
        Button btn2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //获取系统的NotificationManager服务
            nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            
            btn1=(Button)findViewById(R.id.button1);
            btn2=(Button)findViewById(R.id.button2);
            
            btn1.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                    
                    Intent intent=new Intent(MainActivity.this,LoginActivity.class);
                    //对intent进行包装
                    PendingIntent pi=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
                    //创建通知
                    Notification nf=new Notification.Builder(MainActivity.this)
                                //是否自动关闭
                                .setAutoCancel(true)
                                //通知的提示信息
                                .setTicker("有新消息")
                                //小图标
                                .setSmallIcon(R.drawable.ic_launcher)
                                //通知标题
                                .setContentTitle("一条新的通知")
                                //通知内容
                                .setContentText("有新的通知,点击查看")
                                //设置系统默认声音,默认LED灯
                                //.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS)
                                //设置自定义声音
                                //.setSound(sound)
                                //什么时候启动
                                .setWhen(System.currentTimeMillis())
                                //设置该通知要启动的intent
                                .setContentIntent(pi).build();
                    //发送
                    nm.notify(1234, nf);                            
                }
            });
            
            btn2.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    //取消
                    nm.cancel(1234);
                }
            });
    
        }
    }
    View Code

    例子2

    一个下载升级包的例子,点击开始下载,通知栏会增加一条现实进度的消息,下载完成了,点击可安装apk

    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:android1="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <Button
            android1:id="@+id/button1"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:text="开始下载" />
    
    </LinearLayout>
    View Code

    自定义xml

    view1.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/ic_launcher" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/imageView1"
            android:text="XXX.apk"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/textView1"
            android:layout_below="@+id/textView1"
            android:layout_toLeftOf="@+id/textView3" />
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/progressBar1"
            android:text="100K/1024K"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/progressBar1"
            android:text="90%"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/progressBar1"
            android:layout_below="@+id/textView3"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
    </RelativeLayout>
    View Code

    MainActivity.java

    public class MainActivity extends Activity{
    
        NotificationManager nm;
        RemoteViews rv;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            
            Button btn=(Button)findViewById(R.id.button1);
            btn.setOnClickListener(new OnClickListener() {
        
                public void onClick(View v) {
                    Intent intent=new Intent(MainActivity.this,DownService.class);
                    intent.putExtra("appName", "shenghuoriliwannianli_39");
                    intent.putExtra("appURL", "http://gdown.baidu.com/data/wisegame/2dcb384356f57ea2/shenghuoriliwannianli_39.apk");
                    startService(intent);
                }
            });
    
        }
    
    }
    View Code

    DownService.java

    public class DownService extends Service{
    
        private String appName;
        private String appURL;
        private NotificationManager ni;
        private Notification nf;
        private RemoteViews rv;
        private File updateFile;
        
        @Override
        public IBinder onBind(Intent intent) {
            // TODO 自动生成的方法存根
            return null;
        }
        
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            appName=intent.getExtras().getString("appName");
            appURL=intent.getExtras().getString("appURL");
    
            //升级目录
            File updateDir = new File(Environment.getExternalStorageDirectory()+ "/test/");  
            //升级文件
            updateFile = new File(updateDir + "/" + appName + ".apk");  
            //判断文件夹是否存在,不存在则创建
            if(!updateDir.exists()){
                updateDir.mkdir();
            }
            //判断升级文件是否存在,不存在则创建
            if(!updateFile.exists()){
                try {
                    updateFile.createNewFile();
                } catch (IOException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
            
            //创建NotificationManager
            ni=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            //创建notification
            nf=new Notification(R.drawable.ic_launcher,"下载",System.currentTimeMillis());
            //将此通知放到通知栏的"Ongoing"即"正在运行"组中
            nf.flags |= Notification.FLAG_ONGOING_EVENT; 
    
            //定义notification显示
            rv=new RemoteViews(getPackageName(),R.layout.view1);
            rv.setProgressBar(R.id.progressBar1, 100, 0, true);
            rv.setTextViewText(R.id.textView1, appName);
            rv.setTextViewText(R.id.textView3, "0%");
            rv.setTextViewText(R.id.textView2, "0K/0K");
            nf.contentView=rv;
            ni.notify(R.layout.view1, nf);
            
            //开始下载
            new DownLoadThread().start();
            
            return super.onStartCommand(intent, flags, startId);
        }
        
        //定义一个handler,用来刷新界面
        Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                //刷新数据
                if(msg.what==0x01){
                    int downloadSzie=msg.getData().getInt("downloadSzie");
                    int totalSize=msg.getData().getInt("totalSize");
                    //没下载完
                    int pos=downloadSzie*100/totalSize;
                    rv.setTextViewText(R.id.textView3, pos+"%");
                    rv.setTextViewText(R.id.textView2, (downloadSzie/1024)+"K/"+(totalSize/1024)+"K");
    
                    //下载完了
                    if(downloadSzie==totalSize){
                        rv.setTextViewText(R.id.textView4,"下载完成,点击安装");
                        Intent in=new Intent(Intent.ACTION_VIEW);
                        
                        String path=updateFile.getPath();
                        Uri uri=Uri.fromFile(updateFile);
                        in.setDataAndType(uri, "application/vnd.android.package-archive");
                        PendingIntent pendingIntent = PendingIntent.getActivity(DownService.this, 0, in, 0); 
                        //修改标题类型,点击一次后关闭
                        nf.flags = Notification.FLAG_AUTO_CANCEL;
                        nf.contentIntent=pendingIntent;
                    }
                    nf.contentView=rv;
                    ni.notify(R.layout.view1, nf);
                }
    
            }
        };
        
        
        //定义一个下载线程
        class DownLoadThread extends Thread {
            
            private int totalSize=0;
            private int downloadSzie=0;
    
            @Override
            public void run(){
    
                try {
                    URL url;
                    HttpURLConnection http;
                    url = new URL(appURL);
                    http=(HttpURLConnection)url.openConnection();
                    //记录上次百分比,主要是为了减少界面刷新
                    int pos=0;
    
                    //timeout 10秒
                    http.setConnectTimeout(10*1000);
                    http.setReadTimeout(10*1000);
                    //获取文件大小
                    totalSize=http.getContentLength();
                    //成功
                    if(http.getResponseCode()==200){
                        InputStream in=http.getInputStream();
                        FileOutputStream out=new FileOutputStream(updateFile,false);
                        
                        byte[] buffer =new byte[1024];
                        int readSize=0;
                        while ((readSize=in.read(buffer))!=-1){
                            //保存到文件
                            out.write(buffer,0,readSize);
                            //总下载数
                            downloadSzie =downloadSzie +readSize;
                            
                            //刷新界面
                            if(pos!=(downloadSzie*100/totalSize)){
                            Message msg=new Message();
                            msg.what=0x01;
                            Bundle b=new Bundle();
                            b.putInt("downloadSzie", downloadSzie);
                            b.putInt("totalSize", totalSize);
                            msg.setData(b);
                            handler.sendMessage(msg);
                            pos=downloadSzie*100/totalSize;
                        }
                        }
                        if(http!=null){
                            http.disconnect();
                        }
                        in.close();
                        out.close();
                    }
                } catch (Exception e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
        }
        
    
    }
    View Code
  • 相关阅读:
    ES6基础
    RegExp正则表达式基础
    JavaScript基础之--- 手写 bind 方法的实现
    JavaScript基础之--- 手写 apply方法 的实现
    JavaScript基础之--- 手写 call 的实现
    JavaScript基础之--- 手写instanceof 的实现
    git系列之---工作中项目的常用git操作
    git系列之---将本地的项目添加到码云仓库
    git系列之---码云gitee 添加SHH公钥
    TCP的三次握手过程
  • 原文地址:https://www.cnblogs.com/weijj/p/3973095.html
Copyright © 2011-2022 走看看