为通知添加动作


  这里将会使用三种通知动作:

  • 为通知添加标准动作
  • 为通知添加自定义动作
  • 为通知添加语音动作

  说白了就是和我们点击手机上的通知效果一样。比如点击通知打开一个界面,开一个服务啥的。基本就是这个功能。

一、为通知添加标准动作

  接着上一章来,添加一个延迟意图用来跳转界面。通过NotificationCompat.Builder的setContentIntent()方法,为通知添加标准动作。也就是点击通知后会打开一个新的界面。

    /**     * 点击事件     * @param view     */    public void send(View view){        Intent intent = new Intent(this,SecondActivity.class);//跳转界面        PendingIntent pendingIntent = PendingIntent//延迟意图                .getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);        NotificationManagerCompat manager = NotificationManagerCompat.from(this);//通知管理器        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);//通知构造器        builder.setContentTitle("来自手机的消息通知");//设置标题        builder.setDefaults(Notification.DEFAULT_ALL);//设置通知属性        builder.setLargeIcon(//设置大图标                BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));        builder.setAutoCancel(true);//设置自关闭        builder.setContentIntent(pendingIntent);//设置标准动作        builder.setSmallIcon(R.mipmap.ic_launcher);//设置小图标        manager.notify(0, builder.build());//发送通知    }

  【运行效果】


二、为通知添加自定义动作

  这里将使用NotificationCompat.Builder的extend()方法,为通知添加自定义动作。同样延迟意图不变,还是打开SecondActivity界面。

    /**     * 点击事件     * @param view     */    public void send(View view){        Intent intent = new Intent(this,SecondActivity.class);//跳转界面        PendingIntent pendingIntent = PendingIntent//延迟意图                .getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);        NotificationManagerCompat manager = NotificationManagerCompat.from(this);//通知管理器        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);//通知构造器        builder.setContentTitle("来自手机的消息通知");//设置标题        builder.setDefaults(Notification.DEFAULT_ALL);//设置通知属性        builder.setLargeIcon(//设置大图标                BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));        builder.extend(new android.support.v4.app.NotificationCompat.WearableExtender()                .addAction(new android.support.v4.app.NotificationCompat.Action.Builder                        (R.mipmap.ic_launcher,"自定义动作",pendingIntent)//自定义动作                        .build()));        builder.setSmallIcon(R.mipmap.ic_launcher);//设置小图标        manager.notify(0, builder.build());//发送通知    }

  【运行效果】


三、为通知添加语音动作

  这个其实也是自定义动作,只不过增加了调用手表语音传递语音信息的功能。(这里用的是虚拟机,所以我就回传了emoji。如果是穿戴设备的话,会开启设备的语音识别功能,随后穿戴设备会将识别的文字数据传递给要开启的界面)

1.MainActivity界面中的发送通知代码部分

    /**     * 点击事件     * @param view     */    public void send(View view){        Intent intent = new Intent(this,SecondActivity.class);//跳转界面        PendingIntent pendingIntent = PendingIntent//延迟意图                .getActivity(this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);        NotificationManagerCompat manager = NotificationManagerCompat.from(this);//通知管理器        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);//通知构造器        builder.setContentTitle("来自手机的消息通知");//设置标题        builder.setDefaults(Notification.DEFAULT_ALL);//设置通知属性        builder.setLargeIcon(//设置大图标                BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));        builder.extend(new android.support.v4.app.NotificationCompat.WearableExtender()                        .addAction(new android.support.v4.app.NotificationCompat.Action.Builder                                (R.mipmap.ic_launcher,"语音动作",pendingIntent)//添加动作                                .addRemoteInput(new RemoteInput.Builder("voice")                                        .setLabel("随便说句话")//语音识别界面的提示标签                                        .build())                                .build()));        builder.setSmallIcon(R.mipmap.ic_launcher);//设置小图标        manager.notify(0, builder.build());//发送通知    }

2.SecondActivity界面展示返回结果代码部分

public class SecondActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        //获取Bundle        Bundle remoteInputResults = RemoteInput.getResultsFromIntent(getIntent());        CharSequence replyMessage = "";        if (remoteInputResults != null) {//如果Bundle不为空,则有数据返回            replyMessage = remoteInputResults.getCharSequence("voice");//获取数据        }        ((TextView) findViewById(R.id.test)).setText("返回结果:" + replyMessage);//展示返回结果    }}

  【运行效果】


※注意事项

  • 在点击自定义动作的时候,通知并没有关闭。那么如何关闭呢?只需要使用NotificationManagerCompat(通知管理器)的cancel()方法就可以关闭指定的通知。(在cancel()传入的参数要与notify()方法中的参数一致)
  • 在使用手表的语音识别功能时,手机要保持连网的状态。否则是不会有识别结果的。
  • 使用AndroidWear让手表截图,只对真机有效,对虚拟机是没有效果的。当手机接到截图成功的通知后,请用邮件发送截取的图片结果。因为无论是使用微信还QQ都是空白或者是找不到文件路径。

更多相关文章

  1. 利用adb无线连接android手机进行调式 无需获得root权限
  2. 基于Android的闹钟的软件
  3. Android(安卓)纯代码化编码1_关于布局
  4. Android(安卓)ActionBar与Menu - 1 - api demos 学习
  5. Android设置字体大小, 该用sp还是dp?
  6. android 随着认识的去除率EditText(它配备了防抖效果)
  7. Android手机上网、彩信APN设置
  8. Android(安卓)UI 之CheckBox的妙用
  9. 超详细的Android系统50大必备秘籍分享

随机推荐

  1. 利用BLCR加快android的启动过程
  2. Intel发布Android模拟器的x86系统映像
  3. Android开发利器之pidcat安装方式
  4. Android(安卓)滑动效果高级篇(七)—— 华丽
  5. Android游戏框架与常识
  6. android makefile(android.mk)分析(序)
  7. Android2.2添加busybox 支持——基于Andr
  8. Android自学笔记1——基础知识
  9. 2011Android技术面试整理附有详细答案(包
  10. Android系统资源