編輯:關於Android編程
下面事例是使用Android平台的部分代碼。對於這個平台百度的開放人員已經寫了完整的demo,把工程導入到eclipse中之後一般沒有錯誤,如果報錯的話,eclipse也會給出提示。一般可以通過將propertie.properties文件名字改為default.properties就 可以了,如果還有錯誤的話,顯示工程activity錯誤啊什麼的,就是SDK版本不對的問題了,你可以通過他的manifest文件查 看<uses-sdk android:minSdkVersion="8" />找到這個最小值,比如我下載的是2.6他的最低版本是5,我eclipse默認版本是8,就可以同過右鍵單擊該工程,選擇最下面那個properties項,然後在彈出對話框的右側列表中選擇Android,在左側選擇API level為5,也就是2.0,然後確定。就木有問題了。
下面說一下使用該API的具體步驟:
也可以查看百度定位SDK自己的開發指南
1、首先第一步就是搭配環境:
①先將百度demo中的libs文件夾復制到自己的工程。(別忘記把jar包build path)
②然後復制
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" android:permission="android.permission.BAIDU_LOCATION_SERVICE"> <intent-filter> <action android:name="com.baidu.location.service_v2.6"></action> </intent-filter> </service> 到manifest的application節點。
接下來復制百度地位SDK需要的permission
<permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
</uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"> </uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
</uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
</uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
</uses-permission> <uses-permission android:name="android.permission.READ_LOGS"></uses-permission> ③ 接下來就可以在代碼中放心的使用百度定位SDK了。
下面是來自百度的提醒,需要注意的是第五條,因為我們第一次經常定位不到位置:
1、您需要確保程序編譯通過。如果對自己寫的代碼有疑問,可以下載官方高級示例,查看標准源代碼。
2、請確保網絡通暢,無論是連接wifi還是使用2G/3G信號。
3、定位SDK的調用必須在主線程中。
4、必須在定位SDK啟動前設定好參數,例如是否使用GPS,掃描時間間隔設置等。我們強烈建議您設置自己的prodName,並保管好,這樣方便我們為您提供更好的定位服務。
5、定位SDK start之後立即執行,這種情況下很難定位成功,因為定位SDK剛開始啟動還沒有獲取到定位信息。這時getlocation一般為null。如果是要獲取位置成功,可以在listerner中添加一個判斷如果strData為空,則再發起一次定位。
6、定位覆蓋率大概在98%。就是說有2%可能服務器沒有數據,所以定位會失敗。只需要走到別的地方,或者多試幾次即可成功定位。
7、請使用真機。在虛擬機上無法進行定位測試。
下面就是我的事例代碼:
具體思路是:將開啟和獲取位置的代碼分開來做,可以在程序剛開啟的時候就start。因為據上面所說,有時候可能兩分鐘才能獲取到位置,對於我們需要展示信息來說,這是絕對不可以的。如果在主線程卡兩分鐘後果可想而知的。
需要說名的是:我這裡沒有設置時間間隔public void setScanSpan ( int ) //設置定時定位的時間間隔。單位ms,如果不設置或者所設置的整數值小於1000(ms)時,采用第一次定位模式。
每調用一次requestLocatin(),定位SDK會發起一次定位。請求定位與監聽結果一一對應;如果所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。
調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。如果定位SDK根據定位依據發現位置沒有發生變化,就不會發起網絡請求,返回上一次定位的結果;如果發現位置改變,就進行網絡請求進行定位,得到新的定位結果。
定時定位時,調用一次requestLocation,會定時監聽到定位結果。設定了定時定位後,可以熱切換成一次定位,需要重新設置時間間隔小於1000(ms)即可。locationClient對象stop後,將不再進行定位。 如果設定了定時定位模式後,多次調用requestLocation(),則是每隔一段時間進行一次定位,同時額外的定位請求也會進行定位,但頻率不會超過1秒一次。
import android.content.Context;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.palmdeal.entity.LocationInfo.SItude;
import com.palmdeal.util.Logger;
public class LocationProvider { private static LocationClient mLocationClient = null;
private static SItude station = new SItude();
private static MyBDListener listener = new MyBDListener();
Context context;
public LocationProvider(Context context) { super();
this.context = context;
} public void startLocation() { mLocationClient = new LocationClient(context);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
// 打開gps option.setCoorType("bd09ll");
// 設置坐標類型為bd09ll option.setPriority(LocationClientOption.NetWorkFirst);
// 設置網絡優先 option.setProdName("demo");
// 設置產品線名稱 mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(listener);
mLocationClient.start();
//將開啟與獲取位置分開,就可以盡量的在後面的使用中獲取到位置
} /** * 停止,減少資源消耗 */ public void stopListener() {
if (mLocationClient != null && mLocationClient.isStarted()) {
mLocationClient.stop();
mLocationClient = null;
} } /** * 更新位置並保存到SItude中
*/ public void updateListener() {
if (mLocationClient != null && mLocationClient.isStarted()) {
mLocationClient.requestLocation();
Logger.i("update the location");
} } /** * 獲取經緯度信息
* * @return */ public SItude getLocation() {
return station;
} private static class MyBDListener implements BDLocationListener {
@Override public void onReceiveLocation(BDLocation location) {
if (location.getCity() == null) {
int type = mLocationClient.requestLocation();
Logger.e("first request false" + type);
} station.latitude = location.getLatitude();
station.longitude = location.getLongitude();
} @Override public void onReceivePoi(BDLocation arg0) {
// return } } }
在使用的時候,在一開始就開啟LocationClient,即調用startLocation()方法。我的是在服務服務中的onCreate中調用的,然後在代碼中這樣使用:
LocationInfo.SItude station = location.getLocation(); if (station.latitude == 0.0 && station.longitude == 0.0) { location.updateListener(); station = location.getLocation(); } if (station.latitude == 0.0 && station.longitude == 0.0) { return "未定位到您現在的位置,請重試"; } location.stopListener(); 使用上面的方法後,第一次使用都能拿到位置信息。
接著上次來講,這次來動手寫一下listview的下拉刷新功能和上拉加載更多功能。當然google在android4.0以上的API裡面的提供了一個可以下拉加載更多的控件,
在Android開發中,View是我們必須要接觸的用來展示的技術.通常情況下隨著View視圖的越來越復雜,整體布局的性能也會隨之下降.這裡介紹一個在某些場景下提升布局性能
MainActivity.java代碼:package siso.mycrawler;import android.app.Activity;import android
說實話,關於Android中對短信的一些相關操作是一個比較入門的東西。那我現在還要來寫這一篇博客的原因只是因為現在開發中有相關內容,而又想將這些東西分享給更多的人來學習,