博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之OptionsMenu与Notification的实现
阅读量:6148 次
发布时间:2019-06-21

本文共 6804 字,大约阅读时间需要 22 分钟。

  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):

  同样我们主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文件中声明一下震动权限:

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

转载地址:http://hlmya.baihongyu.com/

你可能感兴趣的文章
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>