【0087】【项目实战】-【智慧北京】-【08】【极光消息推送】【语音识别】【聊天机器人】【友盟统计】【扫描二维码】【新闻频道滑动效果】

1.消息推送效果

【下载之后直接安装运行该apk】可以直接在真机上运行;

【群发消息】

 

【给指定的人发送消息】在指定设备标签之后可以给该人发送消息;

2.书写一个demo程序

【生成sdk包并下载解压】

【赋值sdk文件到项目中】

【配置清单文件】

[极光官网的清单配置的参考]

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3     package="您应用的包名"
  4     android:versionCode="311"
  5     android:versionName="3.1.1"
  6     >
  7     <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23" />
  8 
  9     <!-- Required -->
 10     <permission
 11         android:name="您应用的包名.permission.JPUSH_MESSAGE"
 12         android:protectionLevel="signature" />
 13 
 14     <!-- Required -->
 15     <uses-permission android:name="您应用的包名.permission.JPUSH_MESSAGE" />
 16     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
 17     <uses-permission android:name="android.permission.INTERNET" />
 18     <uses-permission android:name="android.permission.WAKE_LOCK" />
 19     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 20     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 21     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 22     <uses-permission android:name="android.permission.VIBRATE" />
 23     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
 24     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 25     <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 26     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 27 
 28     <!-- Optional. Required for location feature -->
 29     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 -->
 30     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 31     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 32     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 33     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
 34     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 35     <uses-permission android:name="android.permission.GET_TASKS" />
 36 
 37     <application
 38         android:icon="@drawable/ic_launcher"
 39         android:label="@string/app_name"
 40         android:name="Your Application Name">
 41 
 42         <!-- Required SDK 核心功能-->
 43         <!-- 可配置android:process参数将PushService放在其他进程中 -->
 44         <service
 45             android:name="cn.jpush.android.service.PushService"
 46             android:enabled="true"
 47             android:exported="false" >
 48             <intent-filter>
 49                 <action android:name="cn.jpush.android.intent.REGISTER" />
 50                 <action android:name="cn.jpush.android.intent.REPORT" />
 51                 <action android:name="cn.jpush.android.intent.PushService" />
 52                 <action android:name="cn.jpush.android.intent.PUSH_TIME" />
 53             </intent-filter>
 54         </service>
 55 
 56 
 57     <!-- since 3.0.9 Required SDK 核心功能-->
 58         <provider
 59             android:authorities="您应用的包名.DataProvider"
 60             android:name="cn.jpush.android.service.DataProvider"
 61             android:exported="true"
 62         />
 63 
 64         <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
 65         <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
 66          <service
 67              android:name="cn.jpush.android.service.DaemonService"
 68              android:enabled="true"
 69              android:exported="true">
 70              <intent-filter >
 71                  <action android:name="cn.jpush.android.intent.DaemonService" />
 72                  <category android:name="您应用的包名"/>
 73              </intent-filter>
 74          </service>
 75 
 76          <!-- since 3.1.0 Required SDK 核心功能-->
 77           <provider
 78                android:authorities="您应用的包名.DownloadProvider"
 79                android:name="cn.jpush.android.service.DownloadProvider"
 80                android:exported="true"
 81            />
 82 
 83         <!-- Required SDK核心功能-->
 84         <receiver
 85             android:name="cn.jpush.android.service.PushReceiver"
 86             android:enabled="true" >
 87           <intent-filter android:priority="1000">
 88                 <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
 89                 <category android:name="您应用的包名"/>
 90             </intent-filter>
 91             <intent-filter>
 92                 <action android:name="android.intent.action.USER_PRESENT" />
 93                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
 94             </intent-filter>
 95             <!-- Optional -->
 96             <intent-filter>
 97                 <action android:name="android.intent.action.PACKAGE_ADDED" />
 98                 <action android:name="android.intent.action.PACKAGE_REMOVED" />
 99                 <data android:scheme="package" />
100             </intent-filter>
101         </receiver>
102 
103         <!-- Required SDK核心功能-->
104         <activity
105             android:name="cn.jpush.android.ui.PushActivity"
106             android:configChanges="orientation|keyboardHidden"
107             android:theme="@android:style/Theme.NoTitleBar"
108             android:exported="false" >
109             <intent-filter>
110                 <action android:name="cn.jpush.android.ui.PushActivity" />
111                 <category android:name="android.intent.category.DEFAULT" />
112                 <category android:name="您应用的包名" />
113             </intent-filter>
114         </activity>
115         <!-- SDK核心功能-->
116         <activity
117             android:name="cn.jpush.android.ui.PopWinActivity"
118             android:configChanges="orientation|keyboardHidden"
119             android:exported="false"
120             android:theme="@style/MyDialogStyle">
121             <intent-filter>
122                 <category android:name="android.intent.category.DEFAULT" />
123                 <category android:name="您应用的包名" />
124             </intent-filter>
125         </activity>
126 
127         <!-- Required SDK核心功能-->
128         <service
129             android:name="cn.jpush.android.service.DownloadService"
130             android:enabled="true"
131             android:exported="false" >
132         </service>
133 
134         <!-- Required SDK核心功能-->
135         <receiver android:name="cn.jpush.android.service.AlarmReceiver" />
136 
137         <!-- Required since 3.0.7 -->
138         <!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 -->
139         <!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter -->
140         <receiver
141         android:name="自定义 Receiver"
142         android:enabled="true" >
143         <intent-filter>
144         <action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
145         <category android:name="您应用的包名" />
146         </intent-filter>
147         </receiver>
148 
149         <!-- User defined. 用户自定义的广播接收器-->
150          <receiver
151              android:name="您自己定义的Receiver"
152              android:enabled="true">
153              <intent-filter>
154                  <!--Required 用户注册SDK的intent-->
155                  <action android:name="cn.jpush.android.intent.REGISTRATION" />
156                  <!--Required 用户接收SDK消息的intent-->
157                  <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
158                  <!--Required 用户接收SDK通知栏信息的intent-->
159                  <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
160                  <!--Required 用户打开自定义通知栏的intent-->
161                  <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
162                  <!-- 接收网络变化 连接/断开 since 1.6.3 -->
163                  <action android:name="cn.jpush.android.intent.CONNECTION" />
164                  <category android:name="您应用的包名" />
165              </intent-filter>
166          </receiver>
167 
168         <!-- Required. For publish channel feature -->
169         <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。-->
170         <!-- 例如: -->
171         <!-- 发到 Google Play 的APK可以设置为 google-play; -->
172         <!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
173         <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
174         <!-- Required. AppKey copied from Portal -->
175         <meta-data android:name="JPUSH_APPKEY" android:value="您应用的Appkey"/>
176     </application>
177 </manifest>

 【新建Receiver】

【新建Application并配置清单】

【效果】此时将demo在手机端运行起来之后,就可以极光推送的推送页面进行消息的推送,并在手机终端可以收到消息;

【receiver的功能】

【效果】可以接收到了消息

【获取通知的内容】

 

【保存附加字段】

 

 

[效果]获取到了url的值;接着可以使用WebView加载url的地址;

3.推送拓展

【自定义消息的推送】很多app的更新是不需要显示通知的,因此可以使用自定义消息进行推送;

【聊天系统的框架】借助第三方的推送,首先需要访问的是本公司的服务器;

【服务器端的与极光服务器的推送的连接】

【消息推送原理】简单的原理

 

4.语音识别

4.1 sdk的下载

 【说明】使用第三方的平台-科大讯飞的开放平台

4.2 demo

 1 package com.itheima.voicedemo;
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 7 import com.iflytek.cloud.RecognizerListener;
 8 import com.iflytek.cloud.RecognizerResult;
 9 import com.iflytek.cloud.SpeechConstant;
10 import com.iflytek.cloud.SpeechError;
11 import com.iflytek.cloud.SpeechRecognizer;
12 import com.iflytek.cloud.SpeechSynthesizer;
13 import com.iflytek.cloud.SpeechUtility;
14 import com.iflytek.cloud.ui.RecognizerDialog;
15 import com.iflytek.cloud.ui.RecognizerDialogListener;
16 
17 public class MainActivity extends Activity {
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23 
24         // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn //
25         // 请勿在“=”与appid之间添加任务空字符或者转义符
26         SpeechUtility.createUtility(this, SpeechConstant.APPID + "=562c44bb");
27     }
28 
29     public void startListen(View view) {
30         // 1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener
31         SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);
32         // 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类
33         mIat.setParameter(SpeechConstant.DOMAIN, "iat");
34         mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
35         mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
36         // 3.开始听写
37         mIat.startListening(mRecoListener);
38     }
39 
40     // 听写监听器
41     private RecognizerListener mRecoListener = new RecognizerListener() {
42 
43         // 听写结果回调接口(返回Json格式结果,用户可参见附录13.1);
44         // 一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加;
45         // 关于解析Json的代码可参见Demo中JsonParser类;
46         // isLast等于true时会话结束。
47         @Override
48         public void onResult(RecognizerResult results, boolean isLast) {
49             System.out.println(results.getResultString());
50             System.out.println("isLast:" + isLast);
51         }
52 
53         // 开始录音
54         @Override
55         public void onBeginOfSpeech() {
56 
57         }
58 
59         // 结束录音
60         @Override
61         public void onEndOfSpeech() {
62 
63         }
64 
65         // 会话发生错误回调接口
66         @Override
67         public void onError(SpeechError arg0) {
68 
69         }
70 
71         // 扩展用接口
72         @Override
73         public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
74 
75         }
76 
77         // volume音量值0~30,data音频数据
78         @Override
79         public void onVolumeChanged(int arg0, byte[] arg1) {
80 
81         }
82 
83     };
84 
85 }

 【效果】使用真机运行结果

4.3语音输入的UI

4.4 语音合成

【说明】写文字可以将文字直接说出来

5.聊天机器人

5.1 聊天机器人的效果

5.2 布局

【说明】聊天的布局使用的是ListView,该显示的显示,该隐藏的隐藏

【按钮的布局】

 

【聊天信息的布局】/聊天机器人74/res/layout/list_item.xml

【说明】将三种样式全部布局在同一个xml中;根据实时的情况进行显示或者隐藏;

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:padding="10dp" >
 6 
 7     <TextView
 8         android:id="@+id/tv_ask"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_alignParentRight="true"
12         android:background="@drawable/asker_bubble"
13         android:gravity="center"
14         android:paddingLeft="10dp"
15         android:paddingRight="15dp"
16         android:text="提问"
17         android:textColor="#000"
18         android:textSize="18sp" />
19 
20     <LinearLayout
21         android:id="@+id/ll_answer"
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:layout_below="@id/tv_ask"
25         android:layout_marginTop="10dp"
26         android:background="@drawable/answer_bubble"
27         android:gravity="center_vertical"
28         android:orientation="vertical"
29         android:paddingLeft="15dp"
30         android:paddingRight="10dp" >
31 
32         <TextView
33             android:id="@+id/tv_answer"
34             android:layout_width="wrap_content"
35             android:layout_height="wrap_content"
36             android:layout_gravity="center_vertical"
37             android:text="回答"
38             android:textColor="#000"
39             android:textSize="18sp" />
40 
41         <ImageView
42             android:id="@+id/iv_pic"
43             android:layout_width="wrap_content"
44             android:layout_height="wrap_content" />
45     </LinearLayout>
46 
47 </RelativeLayout>

 5.3 框架的搭建

 

5.4 移植语音识别

【拷贝库】

【拷贝UI图片】

【拷贝权限】

【初始化】

【界面UI的加载】

 

[临时效果]

5.5 将语音生成的json进行拼接

【拷贝json包】

【写javaBean】

【解析语音】

【两句话合成一句话】其实是一句话,但是语音解析分开了;

 

【提问和回答的对象的封装】

【对话的数据的填充】

 

【设置适配器】

【测试】

【去掉分割线】

【添加回答】

[说明]随机回答话语和随机图片;

 【效果】

【listView定位到最后一个】不必要滑动

 

【朗诵语音】

【效果】带有语音朗诵,并且可以直接定位到最后一张;

6.友盟统计

【说明】用户的活跃量统计;第三方平台;

 

【sdk的下载】

【测试】在真机运行

7.扫描二维码

 【说明】扫描二维码使用的是开源的demo;

7.1 二维码扫描的效果

 

7.2  demo的使用

【说明】源码很多;

8.新闻频道滑动效果Demo

【效果】

【源码实现的说明】使用WindouwManager搞一张图片能够滑动,通过监听移动的位置,使用TransAnimation动画,不断判断位置;

下面的布局是GridView,

 

posted @ 2018-03-08 16:00  OzTaking  阅读(377)  评论(0)    收藏  举报