当前位置:  编程技术>移动开发
本页文章导读:
    ▪怎么导出jar包        如何导出jar包 右键工程->Export->Java->JAR file->Next->   Next   选中工程和工程中你要打包的内容,如果是Android的项目,需要把Manifest文件去掉。 指定打包出的jar文件的名字。 点击Fin.........
    ▪ ProferenceActivity 的施用        ProferenceActivity 的使用   <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="我的位置源"> <CheckBoxPref.........
    ▪ 微信大众平台开发(三)-位置信息的识别       微信公众平台开发(三)--位置信息的识别 位置识别这是实际应用经常应用的消息,特别是很多商家,通过了解用户位置,给用户提供特别的产品或是商场的推荐。其中用户可能发送两种类.........

[1]怎么导出jar包
    来源: 互联网  发布时间: 2014-02-18
如何导出jar包

右键工程->Export->Java->JAR file->Next->

 

Next

 

选中工程和工程中你要打包的内容,如果是Android的项目,需要把Manifest文件去掉。

指定打包出的jar文件的名字。

点击Finish即可。

 


    
[2] ProferenceActivity 的施用
    来源: 互联网  发布时间: 2014-02-18
ProferenceActivity 的使用

 

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="我的位置源">
         <CheckBoxPreference 
	        android:key="wireless_network"
	        android:title="使用无线网络"
	        android:summary="使用无线网络查看应用程序(例如Gooogle地图)中的位置"/>
		<CheckBoxPreference android:key="gps_statellitte_setting" 
		    android:title="启用gprs"
		    android:summary="定位时,精确到街道级别(取消选择可以节约电量)" />
    </PreferenceCategory>
   <PreferenceCategory android:title="个人信息设置">
       <CheckBoxPreference 
           android:key="yesno_save_indivdual_info"
           android:title="是否保存个人信息" />
       <EditTextPreference 
           android:key="individual_name"
           android:title="姓名"
           android:summary="请输入真实姓名"/>
       <PreferenceScreen 点击其他个人信息时,会跳转到另一个页面
           android:key="other_indivdual_msg"
           android:title="其他个人信息"
           android:summary="是否工作,手机">
           	<CheckBoxPreference 
           	    android:key="is_an_employee"
           	    android:title="是否工作" />
           	<EditTextPreference 
           	    android:key="mobile"
           	    android:title="手机"
           	    android:summary="请输入真实手机号"/>
       </PreferenceScreen>
   </PreferenceCategory>
</PreferenceScreen>

 

public class ProferenceActivity extends PreferenceActivity implements OnPreferenceChangeListener{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		addPreferencesFromResource(R.xml.preference);//加载布局文件
		getPreferenceManager().setSharedPreferencesName("settings");
		Preference individualNamePreference = findPreference("individual_name"); //得到姓名的preference对象
		SharedPreferences shaPreferences = individualNamePreference.getSharedPreferences();
		individualNamePreference.setSummary(shaPreferences.getString("individual_name", ""));
		if (shaPreferences.getBoolean("yesno_save_indivdual_info", false)) {
			individualNamePreference.setEnabled(true);
		} else {
			individualNamePreference.setEnabled(false);
		}
		individualNamePreference.setOnPreferenceChangeListener(this);
	}

          //必须重写这个方法,返回值也要为真,不然就不能保存值到xml
	@Override
	public boolean onPreferenceChange(Preference preference, Object newValue) {
             // 设置"姓名"列表项中的summary的值
		preference.setSummary(String.valueOf(newValue));
		return true;
	}

	@Override
	public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
			Preference preference) {
                //判断选中的是否为“是否保存个人信息”列表项的复选框
		if ("yesno_save_indivdual_info".equals(preference.getKey())) { 
 //设置姓名复选框可选和不可选
			findPreference("individual_name").setEnabled(!findPreference("individual_name").isEnabled());
		}
		return super.onPreferenceTreeClick(preferenceScreen, preference);
	}

 
}

   ProferenceActivity是activity的子类,可保存设置的activity,ProferenceActivity提供了一下常用的控件:

 

 

    checkboxpreference,EditTextPreference(点击会弹出一个带edit的对话框),listPrefenrence

 

 

      android:key="wireless_network"指定key,该属性就是保存到xml中的key-value中的key

    一个设置页面对应一个<preferenceScreen>

  代码的意思比较明星了,不做其他的解释,可以看下这个博客上的介绍说的还是比较详细:

http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html

 

   


    
[3] 微信大众平台开发(三)-位置信息的识别
    来源: 互联网  发布时间: 2014-02-18
微信公众平台开发(三)--位置信息的识别

位置识别这是实际应用经常应用的消息,特别是很多商家,通过了解用户位置,给用户提供特别的产品或是商场的推荐。其中用户可能发送两种类型的消息:

1.微信地理位置信息

2.路名、标志性建筑或是商场名称

1.微信地理位置消息

认识一下,微信地理位置消息,包含一些什么信息


<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1351776360</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>23.134521</Location_X>
<Location_Y>113.358803</Location_Y>
<Scale>20</Scale>
<Label><![CDATA[位置信息]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>

包含的主要信息有经度纬度和Label的位置。可以根据label中描述的位置信息,提供给用户对应的服务。也可根据用户的经度纬度信息,提供你最近的产品或是有地域性的产品。

首先根据微信的地理位置信息,定义WeChatLocationMessage类,并能把Xml转换为WeChatLocationMessage对象

public class WeChatLocationMessage {
    private String toUserName;
    private String fromUserName;
    private String createTime;
    private String msgType;
    private String locationx;
    private String localtiony;
    private String scale;
    private String label;
    private String msgId;
    
    public static WeChatLocationMessage getWeChatLocationMessage(String xml){
        XStream xstream = new XStream(new DomDriver());
        WeChatLocationMessage  message = null;
        xstream.alias("xml", WeChatLocationMessage.class);
        xstream.aliasField("ToUserName", WeChatLocationMessage.class, "toUserName");
        xstream.aliasField("FromUserName", WeChatLocationMessage.class, "fromUserName");
        xstream.aliasField("CreateTime", WeChatLocationMessage.class, "createTime");
        xstream.aliasField("MsgType", WeChatLocationMessage.class, "msgType");
        xstream.aliasField("Location_X", WeChatLocationMessage.class, "locationx");
        xstream.aliasField("Location_Y", WeChatLocationMessage.class, "localtiony");
        xstream.aliasField("Scale", WeChatLocationMessage.class, "scale");
        xstream.aliasField("Label", WeChatLocationMessage.class, "label");
        xstream.aliasField("MsgId", WeChatLocationMessage.class, "msgId");
        message = (WeChatLocationMessage)xstream.fromXML(xml);
        return message;
    }
//getter and setter
}
本文利用百度的地图API,查找最近的银行做为示例。

    public String getPalace(String query,String lat,String lng) throws ClientProtocolException, IOException{
        HttpClient httpClient = new DefaultHttpClient();
        String url = palceRequestUrl(/blog_article/query,lat,lng/index.html);
        logger.log(Level.INFO, url);
        HttpGet httpget = new HttpGet(url);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = httpClient.execute(httpget, responseHandler);
        logger.log(Level.INFO,"baidu response:"+responseBody);
        return responseBody;
    }
    
    public String palceRequestUrl(/blog_article/String query,String lat,String lng/index.html) throws UnsupportedEncodingException {
        String url = WeChatConstant.BASEURL + "place/search?query=" + URLEncoder.encode(query,"UTF-8") + "&key="
                + WeChatConstant.MAPKEY +"&location="+lat+","+lng +"&radius=2000"+"&output=" + WeChatConstant.OUTPUTFORMAT;
        return url;
    }
输出的结果
<PlaceSearchResponse>
    <status>OK</status>
    <results>
        <result>
            <name>中国工商银行东长安街支行</name>
            <location>
                <lat>39.915891</lat>
                <lng>116.41867</lng>
            </location>
            <address>东城区东长安街1号东方广场西三办公楼1楼</address>
            <uid>a025683c73033c35a21de987</uid>
            <detail_url>http://api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987&amp;amp;output=html&amp;amp;source=placeapi
            </detail_url>
            <tag>银行,王府井/东单</tag>

        </result>
      </results>
</PlaceSearchResponse>

接下来,把百度地图反映出来的最近位置信息,以图文消息的格式展示给微信用户

    public static String getWeChatReplyNewsMessageByBaiduPlace(List<BaiduPlaceResponse> placeList, double lat, double lng,String userName, int size){
        WeChatReplyNewsMessage newsMessage = new WeChatReplyNewsMessage();
        List<Item> items = new ArrayList<Item>();
        StringBuffer strBuf = new StringBuffer();
        logger.log(Level.INFO,"placeList count="+placeList.size());
        newsMessage.setItems(items);
        if(placeList.size()>size){
            newsMessage.setArticleCount(size);
        }
        else{
            newsMessage.setArticleCount(placeList.size());
        }
        logger.log(Level.INFO,"article count="+newsMessage.getArticleCount());
        newsMessage.setCreateTime(new Date().getTime()+"");
        newsMessage.setMsgType("news");
        newsMessage.setFuncFlag("0");
        newsMessage.setToUserName(userName);
        newsMessage.setFromUserName(WeChatConstant.FROMUSERNAME);
        for(int i = 0;i <newsMessage.getArticleCount();i++){
            BaiduPlaceResponse place = placeList.get(i);
            Double distance = GeoUtil.DistanceOfTwoPoints(Double.valueOf(place.getLng()), Double.valueOf(place.getLat()), lng, lat, GaussSphere.Beijing54);
            Item item = new Item();
            item.setTitle(place.getName()+"["+distance+"米]"+"\n"+place.getAddress()+"\n"+place.getTelephone());
            item.setPicUrl("");
            item.setUrl(place.getDetailUrl());
            item.setDescription("");
            items.add(item);
        }
        logger.log(Level.INFO,"newMessage="+newsMessage.toString());
        strBuf = strBuf.append(getWeChatNewsMessage(newsMessage));
        
        return strBuf.toString();
    }
    
    public static String getWeChatNewsMessage(WeChatReplyNewsMessage newsMessage){
        XStream xstream = new XStream(new DomDriver());
        xstream.alias("xml", WeChatReplyNewsMessage.class);
        xstream.aliasField("ToUserName", WeChatReplyNewsMessage.class, "toUserName");
        xstream.aliasField("FromUserName", WeChatReplyNewsMessage.class, "fromUserName");
        xstream.aliasField("CreateTime", WeChatReplyNewsMessage.class, "createTime");
        xstream.aliasField("MsgType", WeChatReplyNewsMessage.class, "msgType");
        xstream.aliasField("ArticleCount", WeChatReplyNewsMessage.class, "articleCount");
        xstream.aliasField("Content", WeChatReplyNewsMessage.class, "content");
        xstream.aliasField("FuncFlag", WeChatReplyNewsMessage.class, "funcFlag");
        xstream.aliasField("Articles", WeChatReplyNewsMessage.class, "items");
        
        xstream.alias("item", Item.class);
        xstream.aliasField("Title", Item.class, "title");
        xstream.aliasField("Description", Item.class, "description");
        xstream.aliasField("PicUrl", Item.class, "picUrl");
        xstream.aliasField("Url", Item.class, "url");
        
        return xstream.toXML(newsMessage);
    }

2.路名、标志性建筑或是商场名称

对路名、标志性建筑等信息,方法还是通过第三方地图信息,确定输入的位置信息的经度纬度。

本文使用百度地图API,确定所查找的位置的经度和纬度。


    public String getGeoCode(String query) throws ClientProtocolException, IOException{
        HttpClient httpClient = new DefaultHttpClient();
        String url = geoCodeRequestUrl(/blog_article/query/index.html);
        logger.log(Level.INFO, url);
        HttpGet httpget = new HttpGet(url);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = httpClient.execute(httpget, responseHandler);
        logger.log(Level.INFO,"baidu response:"+responseBody);
        return responseBody;
    }
    
    public String geoCodeRequestUrl(/blog_article/String query/index.html) throws UnsupportedEncodingException{
        String url = WeChatConstant.BASEURL + "geocoder?address=" + URLEncoder.encode(query,"UTF-8") + "&key="
                + WeChatConstant.MAPKEY + "&output=" + WeChatConstant.OUTPUTFORMAT;
        return url;
    }

确定了经度和纬度,问题就变成和第1种消息类型一致了,根据经度纬度去做相应处理。

3.源代码

本文的代码较长,提供源代码下载。

WeChatDemo下载

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 微信公众平台开发(三)–位置信息的识别











    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3