zoukankan      html  css  js  c++  java
  • Android之OptionsMenu与Notification的实现

      OptionsMenu是Android提供的一种菜单方式,我们知道当智能机刚兴起时,手机上都会有一个MENU(菜单键),当我们点击时,默认我们打开Android提供的默认菜单,本篇我么就一起来学一下,如何自定义Android MENU菜单。

      当我们创建一个Activity后,默认实现了OnCreate方法,我们想实现Android菜单,还需要实现另外两个方法:onCreateOptionsMenu();onOptionsItemSelected(),下面我们就一起来学习一下如何使用吧;

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            
            menu.add(0, 0, 0, "分享");
            menu.add(0, 1, 1, "关于");
            
            return true;
            
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            
            switch (item.getItemId()) {
            case 0:
                  //调用发短信功能
                  Intent intent=new Intent(Intent.ACTION_SEND);              
                  intent.setType("text/plain");
                  intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
                  intent.putExtra(Intent.EXTRA_TEXT, "I would like to share this with you...");//短信内容
                  startActivity(Intent.createChooser(intent, getTitle()));
                  break;
            case 1:
                Toast.makeText(MainActivity.this, "祝你开心愉快!", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
            }
            
            return true;
        }
    
    }

      好了,我们的Android MENU菜单就实现了,大家快来试一下吧。


       下面我们一起学习一下Android通知系统Notification:

    • 要使用Android通知必须使用到Android通知管理器:NotificationManager管理这个应用程序的通知,每个Notification都有唯一标识符即ID。用于管理更新这个通知内容……

    第一种:实现方式(Notification通知系统默认提示方式)

      Notification实例和别的应用不同,没有布局文件,这里我只在布局文件中添加了一个Button按钮,这里就不再赘述,下面看一下我们主控件Activity:

    public class Activityone extends Activity {
        
            // 设置通知的ID
            private static final int MY_NOTIFICATION_ID = 1;
    
            // 记录通知的数目 
            private int mNotificationCount;
            
            // 通知中的文本信息
            private final CharSequence tickerText = "你有一条新通知,请查看!";
            private final CharSequence contentTitle = "你好";
            private final CharSequence contentText = "欢迎你来到河南,来到焦作。";
    
            // Notification Action Elements
            private Intent mNotificationIntent;
            private PendingIntent mContentIntent;
    
            // 设置收到通知时的响铃  
            private Uri soundURI = Uri.parse("android.resource://cn.edu.hpu.android.activity_notification/" + R.raw.music);
            
            //震动设置,必须在配置文件中声明震动许可
            private long[] mVibratePattern = { 0, 200, 200, 300 };
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_one);
            
            mNotificationIntent = new Intent(Activityone.this, Activitytwo.class);
            mContentIntent = PendingIntent.getActivity(Activityone.this, 0, mNotificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
            
            Button mybutton1 = (Button)findViewById(R.id.buttonone1);
            mybutton1.setOnClickListener(new OnClickListener() {
    
                @SuppressLint("NewApi")
                @Override
                public void onClick(View v) {
                    // 建立通知
                    Notification.Builder NB = new Notification.Builder(Activityone.this)
                    .setTicker(tickerText)
                    .setSmallIcon(android.R.drawable.stat_sys_warning)            //设置系统通知图标
                    .setAutoCancel(true)        //设置通知是否可以取消
                    .setContentTitle(contentTitle)
                    .setContentText(contentText + " (" + ++mNotificationCount + ")")  //显示用户收到几条信息
                    .setContentIntent(mContentIntent)    //设置跳转的地址
                    .setSound(soundURI)        //设置声音的地址
                    .setVibrate(mVibratePattern);        //设置收到通知时震动
                    
                    // Pass the Notification to the NotificationManager:
                    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                    mNotificationManager.notify(MY_NOTIFICATION_ID, NB.build());
                }
            });       
        }
    }

      注意:cn.edu.hpu.android.activity_notification:是我们的主Activity的包名;R.raw.music:我们设置的提示音乐,这里我们的工程目录下并没有raw文件,需要我们在res下自行创建,然后将我们的音乐文件拷贝之此即可。

     第二种:自定义通知栏提示视图

      既然是自定义,那么我们的自定义视图如下(custom_notification.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toast_layout_root"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#7777"
        android:padding="3dp" >
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="44dp"
            android:layout_height="44dp"
            android:layout_marginRight="10dp"
            android:contentDescription="Eye"
            android:src="@drawable/fire_eye_alien" />
    
        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#FFF"
            android:textSize="10sp" />
    
    </LinearLayout>

      同样我们主Activity并没有视图文件,那么我们主Activity代码与上面有哪些区别呢:

    public class Activitythree extends Activity {
        
        // Notification ID to allow for future updates
        private static final int MY_NOTIFICATION_ID = 2;
    
        // Notification Count 
        private int mNotificationCount;//记录通知的数目
        
        // Notification Text Elements
        private final CharSequence tickerText = "你有一条新通知,请查看!";
        private final CharSequence contentTitle = "你好";
        private final CharSequence contentText = "欢迎你来到河南,来到焦作。";
    
        // Notification Action Elements
        private Intent mNotificationIntent;
        private PendingIntent mContentIntent;
    
        // Notification Sound and Vibration on Arrival  
        private Uri soundURI = Uri.parse("android.resource://cn.edu.hpu.android.activity_notification/"+ R.raw.music);
        
        //震动设置,必须在配置文件中声明震动许可
        private long[] mVibratePattern = { 0, 200, 200, 300 };
            
        RemoteViews mContentView = new RemoteViews("cn.edu.hpu.android.activity_notification", R.layout.custom_notification);
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_one);
            
            mNotificationIntent = new Intent(Activitythree.this, Activityfour.class);
            mContentIntent = PendingIntent.getActivity(Activitythree.this, 0, mNotificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
            
            Button mybutton1 = (Button)findViewById(R.id.buttonone1);
            mybutton1.setOnClickListener(new OnClickListener() {
    
                @SuppressLint("NewApi")
                @Override
                public void onClick(View v) {
                    
                    mContentView.setTextViewText(R.id.text, contentText + " ("
                            + ++mNotificationCount + ")");//设置视图中textview的内容
                    
                    Notification.Builder NB = new Notification.Builder(Activitythree.this)
                    .setTicker(tickerText)
                    .setSmallIcon(android.R.drawable.stat_sys_warning)
                    .setAutoCancel(true)            
                    .setContent(mContentView)
                    .setContentIntent(mContentIntent)
                    .setSound(soundURI)
                    .setVibrate(mVibratePattern);
                    
                    // Pass the Notification to the NotificationManager:
                    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                    mNotificationManager.notify(MY_NOTIFICATION_ID, NB.build());
                    
                }
            });
      } }

      最后补充一点,这里我们使用到了消息震动提示,所以我们需要在AndroidManifest.xml文件中声明一下震动权限:

    <!-- 震动许可声明 -->
    <uses-permission android:name="android.permission.VIBRATE" />

      到这里关于Android应用消息通知,就为大家介绍完毕,感兴趣的小同鞋可以实现一下,代码简单,如有疑问欢迎留言讨论。新手学习,高手交流。

  • 相关阅读:
    02.JSP内置对象
    01.JSP基础语法
    Spring第二天:Spring的IOC的注解方式、Spring的AOP开发(XML)
    Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入
    Struts2学习第4天--拦截器
    Struts2学习第3天--OGNL、EL、值栈
    Struts2学习第2天--Struts2的Servlet的API的访问 Struts2的结果页面的配置 Struts2的数据的封装(包括复杂类型)
    Struts2学习第一天--Struts2的概述、Struts2的入门、Struts2常见的配置、Struts2的Action的编写
    Hibernate学习第4天--HQL——QBC查询详解,抓取策略优化。
    Hibernate学习第三天(2)(多对多关系映射)
  • 原文地址:https://www.cnblogs.com/AndroidJotting/p/4943747.html
Copyright © 2011-2022 走看看