楼主: 熊猫儿

[转载] 【Android的一些重要知识7。。。。】

[复制链接]
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
71#
 楼主| 发表于 2018-3-5 08:34 | 只看该作者
  •      try  
  •             {  
  •                 _data.writeInterfaceToken("CalcPlusService");  
  •                 _data.writeInt(50);  
  •                 _data.writeInt(12);  
  •                 mPlusBinder.transact(0x110, _data, _reply, 0);  
  •                 _reply.readException();  
  •                 _result = _reply.readInt();  
  •                 Toast.makeText(this, _result + "", Toast.LENGTH_SHORT).show();  
  •   
  •             } catch (RemoteException e)  
  •             {  
  •                 e.printStackTrace();  
  •             } finally  
  •             {  
  •                 _reply.recycle();  
  •                 _data.recycle();  
  •             }  
  •         }  
  •   
  •     }  
  •       
  •     public void divInvoked(View view)  
  •     {  
  •   
  •         if (mPlusBinder == null)  
  •         {  
  •             Toast.makeText(this, "未连接服务端或服务端被异常杀死", Toast.LENGTH_SHORT).show();  
  •         } else  
  •         {  
  •             android.os.Parcel _data = android.os.Parcel.obtain();  
  •             android.os.Parcel _reply = android.os.Parcel.obtain();  
  •             int _result;  
  •             try  
  •             {  
  •                 _data.writeInterfaceToken("CalcPlusService");  
  •                 _data.writeInt(36);  
  •                 _data.writeInt(12);  
  •                 mPlusBinder.transact(0x111, _data, _reply, 0);  
  •                 _reply.readException();  
  •                 _result = _reply.readInt();  
  •                 Toast.makeText(this, _result + "", Toast.LENGTH_SHORT).show();  
  •   
  •             } catch (RemoteException e)  
  •             {  
  •                 e.printStackTrace();  
  •             } finally  
  •             {  
  •                 _reply.recycle();  
  •                 _data.recycle();  
  •             }  
  •         }  
  •   
  •     }  
  • }  

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
72#
 楼主| 发表于 2018-3-5 08:34 | 只看该作者
为了明了,我直接在mulInvoked里面写了代码,和服务端都没有抽象出一个接口。首先绑定服务时,通过onServiceConnected得到Binder驱动即mPlusBinder;

然后准备数据,调用transact方法,通过code指定执行服务端哪个方法,代码和上面的分析一致。

下面看运行结果:

是不是很好的实现了我们两个应用程序间的通讯,并没有使用aidl文件,也从侧面分析了我们上述分析是正确的。


好了,就到这里,相信大家看完这篇博文,对aidl和Binder的理解也会更加深刻。


测试代码点击下载

代码先安装server端的代码,然后再安装client端的。。。


使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
73#
 楼主| 发表于 2018-3-5 08:35 | 只看该作者
Android 智能问答机器人的实现


今天看到一个ios写的图灵机器人,直接去官网http://www.tuling123.com/openapi/)看了下API接入,太简单了,就一个get请求~于是乎,写了一个Android版本的机器人,没什么技术含量,但是挺好玩的~刚好昨晚看了自己喜欢的秦时明月,嘿嘿,小貔貅,就是我的机器人宠物啦~

1、效果图

先看看效果图:




使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
74#
 楼主| 发表于 2018-3-6 09:00 | 只看该作者

当然不仅是闲聊,还有更强大的,见下图:


好了,效果图就先这样了,有兴趣的自己去研究下,还支持自动学习噢 ~

下面开始代码了~

2、布局文件

主界面消息的显示是一个ListView,不过这个listView中的Item有两种风格,一个是左边的绿色消息,一个是右边的白色消息

左边的消息布局文件:



使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
75#
 楼主| 发表于 2018-3-6 09:01 | 只看该作者
[html] view plain copy


  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:layout_width="match_parent"  
  •     android:layout_height="wrap_content"  
  •     androidrientation="vertical" >  
  •   
  •     <TextView  
  •         android:id="@+id/chat_from_createDate"  
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="2012-09-01 18:30:20"  
  •         style="@style/chat_date_style"  
  •        />  
  •   
  •     <LinearLayout  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="wrap_content"  
  •         androidrientation="horizontal" >  
  •   
  •         <LinearLayout  
  •             android:layout_width="wrap_content"  
  •             android:layout_height="wrap_content"  
  •             android:layout_marginLeft="10dp"  
  •             androidrientation="vertical" >  
  •   
  •             <ImageView  
  •                 android:id="@+id/chat_from_icon"  
  •                 android:layout_width="49dp"  
  •                 android:layout_height="49dp"  
  •                 android:src="@drawable/icon" />  
  •   
  •             <TextView  
  •                 android:id="@+id/chat_from_name"  
  •                 android:layout_width="wrap_content"  
  •                 android:layout_height="wrap_content"  
  •                 android:layout_gravity="center"  
  •                 android:text="小貅貅"  
  •                 android:textSize="18sp" />  
  •         </LinearLayout>  
  •          
  •         <TextView   
  •             android:id="@+id/chat_from_content"  
  •             android:layout_width="wrap_content"  
  •             android:layout_height="wrap_content"  
  •             android:minHeight="50dp"  
  •             android:background="@drawable/chat_from_msg"  
  •             android:text="有大吗。。。"  
  •             android:textSize="18sp"  
  •             android:textColor="#000"  
  •             android:gravity="center_vertical"  
  •             android:focusable="true"  
  •             android:clickable="true"  
  •             android:lineSpacingExtra="2dp"  
  •             />  
  •     </LinearLayout>  
  •   
  • </LinearLayout>  

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
76#
 楼主| 发表于 2018-3-6 09:01 | 只看该作者
右边的和左边基本一致,就不贴了,最后会给出代码。

主布局文件:


[html] view plain copy


  • <?xml version="1.0" encoding="utf-8"?>  
  • <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:layout_width="match_parent"  
  •     android:layout_height="match_parent"  
  •     android:background="@drawable/chat_bg_default"  
  •     androidrientation="vertical" >  
  •   
  •     <RelativeLayout  
  •         android:id="@+id/ly_chat_title"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="45dp"  
  •         android:background="@drawable/title_bar" >  
  •   
  •         <TextView  
  •             android:layout_width="fill_parent"  
  •             android:layout_height="fill_parent"  
  •             android:gravity="center"  
  •             android:text="小貔貅"  
  •             android:textColor="#fff"  
  •             android:textSize="20sp"  
  •             android:textStyle="bold" />  
  •     </RelativeLayout>  
  •   
  •     <RelativeLayout  
  •         android:id="@+id/ly_chat_bottom"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="55dp"  
  •         android:layout_alignParentBottom="true"  
  •         android:background="@drawable/bottom_bar" >  
  •   
  •         <Button  
  •             android:id="@+id/id_chat_send"  
  •             android:layout_width="60dp"  
  •             android:layout_height="40dp"  
  •             android:layout_alignParentRight="true"  
  •             android:layout_centerVertical="true"  
  •             android:layout_marginRight="10dp"  
  •             android:background="@drawable/chat_send_btn"  
  •             androidnClick="sendMessage"  
  •             android:text="发送" />  
  •   
  •         <EditText  
  •             android:id="@+id/id_chat_msg"  
  •             android:layout_width="fill_parent"  
  •             android:layout_height="40dp"  
  •             android:layout_centerVertical="true"  
  •             android:layout_marginLeft="10dp"  
  •             android:layout_marginRight="10dp"  
  •             android:layout_toLeftOf="@id/id_chat_send"  
  •             android:background="@drawable/login_edit_normal"  
  •             android:singleLine="true"  
  •             android:textSize="18sp" />  
  •     </RelativeLayout>  
  •   
  •     <ListView  
  •         android:id="@+id/id_chat_listView"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="fill_parent"  
  •         android:layout_above="@id/ly_chat_bottom"  
  •         android:layout_below="@id/ly_chat_title"  
  •         android:cacheColorHint="#0000"  
  •         android:divider="@null"  
  •         android:dividerHeight="5dp"  
  •         android:scrollbarStyle="outsideOverlay" >  
  •     </ListView>  
  •   
  • </RelativeLayout>  


使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
77#
 楼主| 发表于 2018-3-6 09:02 | 只看该作者

就是ListView和下面的消息框和消息按钮了~没撒好说的

3、HttpUtils

封装了一个用于访问API的工具类,其实就一个Get请求:


[java] view plain copy


  • package com.zhy.utils;  
  •   
  • import java.io.ByteArrayOutputStream;  
  • import java.io.IOException;  
  • import java.io.InputStream;  
  • import java.io.UnsupportedEncodingException;  
  • import java.net.HttpURLConnection;  
  • import java.net.URL;  
  • import java.net.URLEncoder;  
  • import java.util.Date;  
  •   
  • import com.example.android_robot_01.bean.ChatMessage;  
  • import com.example.android_robot_01.bean.ChatMessage.Type;  
  • import com.example.android_robot_01.bean.CommonException;  
  • import com.example.android_robot_01.bean.Result;  
  • import com.google.gson.Gson;  
  •   
  • public class HttpUtils  
  • {  
  •     private static String API_KEY = "534dc342ad15885dffc10d7b5f813451";  
  •     private static String URL = "http://www.tuling123.com/openapi/api";  
  •   
  •     /**
  •      * 发送一个消息,并得到返回的消息
  •      * @param msg
  •      * @return
  •      */  
  •     public static ChatMessage sendMsg(String msg)  
  •     {  
  •         ChatMessage message = new ChatMessage();  
  •         String url = setParams(msg);  
  •         String res = doGet(url);  
  •         Gson gson = new Gson();  
  •         Result result = gson.fromJson(res, Result.class);  
  •          
  •         if (result.getCode() > 400000 || result.getText() == null  
  •                 || result.getText().trim().equals(""))  
  •         {  
  •             message.setMsg("该功能等待开发...");  
  •         }else  
  •         {  
  •             message.setMsg(result.getText());  
  •         }  
  •         message.setType(Type.INPUT);  
  •         message.setDate(new Date());  
  •          
  •         return message;  
  •     }  
  •   


使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
78#
 楼主| 发表于 2018-3-6 09:03 | 只看该作者
  •    /**
  •      * 拼接Url
  •      * @param msg
  •      * @return
  •      */  
  •     private static String setParams(String msg)  
  •     {  
  •         try  
  •         {  
  •             msg = URLEncoder.encode(msg, "UTF-8");  
  •         } catch (UnsupportedEncodingException e)  
  •         {  
  •             e.printStackTrace();  
  •         }  
  •         return URL + "?key=" + API_KEY + "&info=" + msg;  
  •     }  
  •   
  •     /**
  •      * Get请求,获得返回数据
  •      * @param urlStr
  •      * @return
  •      */  
  •     private static String doGet(String urlStr)  
  •     {  
  •         URL url = null;  
  •         HttpURLConnection conn = null;  
  •         InputStream is = null;  
  •         ByteArrayOutputStream baos = null;  
  •         try  
  •         {  
  •             url = new URL(urlStr);  
  •             conn = (HttpURLConnection) url.openConnection();  
  •             conn.setReadTimeout(5 * 1000);  
  •             conn.setConnectTimeout(5 * 1000);  
  •             conn.setRequestMethod("GET");  
  •             if (conn.getResponseCode() == 200)  
  •             {  
  •                 is = conn.getInputStream();  
  •                 baos = new ByteArrayOutputStream();  
  •                 int len = -1;  
  •                 byte[] buf = new byte[128];  
  •   
  •                 while ((len = is.read(buf)) != -1)  
  •                 {  
  •                     baos.write(buf, 0, len);  
  •                 }  
  •                 baos.flush();  
  •                 return baos.toString();  
  •             } else  
  •             {  
  •                 throw new CommonException("服务器连接错误!");  
  •             }  
  •   
  •         } catch (Exception e)  
  •         {  
  •             e.printStackTrace();  
  •             throw new CommonException("服务器连接错误!");  
  •         } finally  
  •         {  
  •             try  
  •             {  
  •                 if (is != null)  
  •                     is.close();  
  •             } catch (IOException e)  
  •             {  
  •                 e.printStackTrace();  
  •             }  
  •   
  •             try  
  •             {  
  •                 if (baos != null)  
  •                     baos.close();  
  •             } catch (IOException e)  
  •             {  
  •                 e.printStackTrace();  
  •             }  
  •             conn.disconnect();  
  •         }  
  •   
  •     }  
  •   
  • }  http://blog.csdn.net/lmj623565791/article/details/38498353

使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
79#
 楼主| 发表于 2018-3-7 11:10 | 只看该作者
暴露出去的,就是sendMsg这个静态方法,当然将返回的数据也直接封装成了ChatMessage
4、ChatMessage
[java] view plain copy


  • package com.example.android_robot_01.bean;  
  •   
  • import java.text.DateFormat;  
  • import java.text.SimpleDateFormat;  
  • import java.util.Date;  
  •   
  • public class ChatMessage  
  • {  
  •   
  •     /**
  •      * 消息类型
  •      */  
  •     private Type type ;  
  •     /**
  •      * 消息内容
  •      */  
  •     private String msg;  
  •     /**
  •      * 日期
  •      */  
  •     private Date date;  
  •     /**
  •      * 日期的字符串格式
  •      */  
  •     private String dateStr;  
  •     /**
  •      * 发送人
  •      */  
  •     private String name;  
  •   
  •     public enum Type  
  •     {  
  •         INPUT, OUTPUT  
  •     }  
  •   
  •     public ChatMessage()  
  •     {  
  •     }  
  •   
  •     public ChatMessage(Type type, String msg)  
  •     {  
  •         super();  
  •         this.type = type;  
  •         this.msg = msg;  
  •         setDate(new Date());  
  •     }  
  •   
  •     public String getDateStr()  
  •     {  
  •         return dateStr;  
  •     }  


使用道具 举报

回复
论坛徽章:
1682
九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-27 15:37:10九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55九尾狐狸
日期:2012-09-19 11:12:55玉石琵琶
日期:2014-06-26 16:52:29玉石琵琶
日期:2014-06-26 16:52:29
80#
 楼主| 发表于 2018-3-7 11:11 | 只看该作者
  • public Date getDate()  
  •     {  
  •         return date;  
  •     }  
  •   
  •     public void setDate(Date date)  
  •     {  
  •         this.date = date;  
  •         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  •         this.dateStr = df.format(date);  
  •   
  •     }  
  •   
  •     public String getName()  
  •     {  
  •         return name;  
  •     }  
  •   
  •     public void setName(String name)  
  •     {  
  •         this.name = name;  
  •     }  
  •   
  •     public Type getType()  
  •     {  
  •         return type;  
  •     }  
  •   
  •     public void setType(Type type)  
  •     {  
  •         this.type = type;  
  •     }  
  •   
  •     public String getMsg()  
  •     {  
  •         return msg;  
  •     }  
  •   
  •     public void setMsg(String msg)  
  •     {  
  •         this.msg = msg;  
  •     }  
  •   
  • }  

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表