android定位demo
① 高德地圖android的demo,在小米手機上會自動獲取定位許可權
如果app的gradle中targetSdkVersion<23 系統會默認將改APP需要使用到的所有許可權打開,你如果做開發想要手機安裝自己的APP默認開啟所有許可權,就targetSdkVersion 22就行。
② android 單元測試demo怎麼寫
工具/原料
eclipse
方法/步驟
這里我們拿「android的ScrollView滾動布局獲取數據基礎方法」這個示例中利用HttpUtils工具類獲得json數據為例,利用單元測試進行測試。
首先,在AndroidManifest.xml清單文件中使用滑鼠點擊的方法添加android.test.InstrumentationTestRunner(如果使用代碼容易出錯),之後再添加Instrumentation的Name和Target package,全部自動完成這一過程。具體方法
然後在AndroidManifest中使用Alt+/自動添加單元測試包,單元測試准備工作完成,
在第二步中targetPackage指定的包名com.example.layout,意思是在com.example.layout包下所有包下的類都可以進行單元測試,所以我們在該包下建立一個測試類MyTest,並繼承AndroidTestCase,寫一個testjson()方法,用於測試android語句是否能正確輸出json數據 。
寫好測試代碼之後,進行如圖方式執行測試代碼。如果出現「綠色」,則測試成功,這樣就完成了單元測試,模擬器只需要在旁邊掛著,不用模擬器,而可以進行多個函數的獨立單元測試,不僅節省了時間,還提高了工作效率。
END
注意事項
在到項目UI中執行之前利用單元測試可以提高工作效率,省去使用模擬器測試卡機浪費的時間。
③ 怎麼查看Android sdk中的源碼demo,apidemo跟Android的版本有關系...
1. Custom Dialog
Android支持自定義窗口的風格:
1)首先在資源裡面建立style的value;
example:
drawable/filled_box.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
2)設置當前activity的屬性,兩種方式:1.在manifest文件中給指定的activity增加屬性
android:theme="@android:style/Theme.CustomDialog"。2.在程序中增加語句setTheme(R.style.Theme_CustomDialog);
PS1:如果只是將Acticity顯示為默認的Dialog, 跳過第一步,只需要在manifest文中增加屬性:android:theme="@android:style/Theme.Dialog"或者在程序中增加setTheme(android.R.style.Theme_Dialog).
PS2:其他創建Dialog的方法:創建app.Dialog類或者創建app.AlertDialog類。
Next Study:能不能在Activity已經打開以後動態修改當前Activity的風格?
在測試中發現,在onCreate()事件中增加setTheme(),必須在setContentView()之前,否則指定的Style不能生效
2.Custom Title
Android除了可以為指定的Activity設置顯示風格,此外也可以為指定的Activity設置一些特效,比如自定義Title,沒有Title的Activity或者增加一個ICON等。
有意思的一點是,這些特效並不是你想設置的時候就行設置,你需要在Activity顯示之前向系統申請要顯示的特效,這樣才能在下面的程序中為這些特效進行設置。(這樣是不是多此一舉有待研究)
為一個Activity設置自定義Title的流程:
1)為自定義的Title建立一個layout(custom_title_1.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/screen"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<textview android:id="@+id/left_text" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Left" />
<textview android:id="@+id/right_text" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="Right" />
2)為activity設定自定義Title特效並指定Title的layout:
在onCreate()事件中增加:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.custom_title);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1);
這三條語句的次序不能顛倒,依次為申請特效,創建view,設置特效屬性。其中requestWindowFeature等價於getWindow().requestFeature()
3)在需要修改Title的地方,獲取left_text或者right_text進行設置即可。
Next Study:Activity的其他顯示特效
Window還有其他一些feature,比如FEATURE_CONTEXT_MENU,FEATURE_NO_TITLE,FEATURE_LEFT_ICON等,有待繼續學習研究。
1. Forwarding
這個實現很簡單,就是啟動新的Activity或者Service後,增加一個finish()語句就可以了,這個語句會主動將當前 activity從歷史stack中清除,這樣back操作就不會打開當前activity。
做這個實驗的時候,發現開發Android程序需要注意的一點小問題:增加新的activity時,不能只增加一個class,一定要記得要在manifest文件中增加該activity的描述。(這個簡單的功能,未來google應該給增加吧)
「android:name中的點」意義:首先manifest會有一個默認指定的package屬性,比如指定為"com.android.sample",如果我們增加的activity的實現也在這個package下,則android:name為實現的類名,這個類名前加不加點都沒有關系,都會自動找到該實現,比如實現為forwardtarget,則android:name寫成forwardtarget或者.forwardtarget都可以。唯一有區別的是,如果activity的實現是在默認包的子包裡面,則前面這個點就尤為重要,比如activity的實現是com.android.sample.app.forwardtarget,則android:name必須寫成.app.forwardtarget或者com.android.sample.app.forwardtarget。如果只寫app.forwardtarget,通常編輯器就會提示該類找不到,但不巧的是,你恰好有一個類是app.forwardtarget,那你只有等著運行時報錯吧。
所以建議養成習慣只要是默認package下面的類,無論是否是在子包裡面,前面都要加上一個點,現在當前實現是在默認package下。
2.Persistent
這里的持久化其實就是本地配置文件的讀寫,實現方法是通過Activity.getPreferences(int)獲取SharedPreferences對象,然後操作配置文件的讀寫,值得注意的是以下幾點:
1)Activity.getPreferences(int mode)等價於Content.getSharedPreferences(String filename,int mode),這裡面的filename就是當前class的名稱,例如在PersistentTest類中調用getPreferences(0),等價於調用getPreferences("PersistentTest", 0)。如不想用class name做文件名,可以直接調用getSharedPreferences方法,自己指定配置文件的名稱。
2)mode值的定義:
MODE_PRIVATE = 0,表示當前配置文件為私有文件,只有當前的應用可以訪問。
MODE_WORLD_READABLE = 1,表示當前配置文件可以被其他應用讀取。
MODE_WORLD_WRITEABLE = 2,表示當前配置文件可以被其他應用寫入。
如果配置文件又想被人讀又想被寫人,怎麼辦呢,呵呵,當然是MODE_WORLD_READABLE&MODE_WORLD_WRITEABLE,真的懷疑設計android的人以前是做C/C++的。
3)SharedPreferences是個很有意思的實現,讀取數據的時候,直接用get方法就可以了,可是寫數據的時候,沒用給set方法,呵呵,第一次用這個類一定會以為只能讀不能寫。如果要寫數據的話,需要用editor()方法(為什麼不是getEditor()呢?看來設計的人一定是做C/C++的)獲取SharedPreferences.Editor類,然後用這個類的put方法寫文件。為什麼要這樣做呢?好久沒有看設計模式了,不知道他採用是哪種高級模式,等以後有時間,看看它的實現再做研究吧。
4)在這個實現中,讀文件是放在onResume()中,寫文件是在onPause()中,為什麼要這么做呢,看字面意思,好像只有恢復和暫停的時候才會被執行,那程序第一次創建的時候會讀文件嗎?來讓我們看看Activity的生命周期,就會發現這么做的巧妙之處:
看到了吧,在Activity運行的前後,無論狀態怎麼轉移,onResume()和onPause()一定會被執行,與其說實現的巧妙,還不如贊一下這個生命周期的設計的巧妙,這個巧妙不是說說而已,有時間的話,看看MFC中一個windows或者dialog的生命周期,你就知道這個巧妙的含義了,我們可以省多少的事情啊!所以值得記住的是,在android中想在運行前後必須要執行的語句,就應該放在onResume()和onPause()中。
4)最後說一個對android小不爽的地方:drawable,什麼鬼東西啊!在res/drawable放一個文件,訪問的時候是drawable/name,如果在values裡面建立一個drawable的變數,訪問的時候也是drawable/name,例如在drawable目錄下放入一個red.xml文件,訪問的時候是@drawable/red,如果建立一個drawable的變數red,訪問也是@drawable/red,這完全就是兩個東西啊,雖然最新的編輯器會提示重名,但查找的時候真的很不方便啊,尤其是drawable變數,可以放在一個abc.xml中 。
這個實驗描述了Activity之間的另外一種切換方式,通常Activity的切換方式是Activity1通過startActivity切換到Activity2, Activity2再通過startActivity切換到其他的Activity,但是有的時候我們需要啟動一個新的Activity獲取用戶的輸入,然後返回到原來的Activity,比如activity是一個通訊錄列表,我們通過一個增加按鈕打開另一個activity讓用戶輸入新的聯系人,輸入後再返回通訊錄列表。
這個時候,我們可以通過startActivityForResult(Intent, int)方法啟動新的Activity,新的Activity通過setResult(int, Intent)方法返回老的Activity,這個時候會觸發老的Activity的onActivityResult(int, int, Intent)方法,我們可以在這個方法的實現中處理返回事件。
startActivityForResult(Intent, int),其中int為Request Code,也是onActivityResult的第一個參數,通常一個Activity不僅僅只觸發一個獲取事件,比如上面提到的通訊錄,可能會有一個增加聯系人的事件,也可能會有一個修改聯系人或給指定聯系人增加一個電話的事件,但我們只有一個onActivityResult方法,所以我們需要這么一個Request Code區分是哪個事件的返回,這個值是用戶自己定義的,而且完全是用戶自己進行管理,很人性化。
setResult(int, Intent),其中的int是Result Code,它表示的是返回的狀態,也是onActivityResult的第二個參數。這個參數需要特別注意一下,android為這個值提供了三個默認的常量。我們先看前兩個,RESULT_CANCELED和RESULT_OK,這個從字面上很好理解,一個是運行取消,另一個是運行成功返回,當用戶按BACK鍵時,Result Code就是RESULT_CANCELED。但我們看看他們分別對應的值,就會發現奇怪的地方,RESULT_CANCELED=0,RESULT_OK=-1!!!在其他系統中OK通常都是1,而在android,它是-1,這是為什麼呢,來讓我們看看第三個默認的常量,RESULT_FIRST_USER=1,明白了吧!android把所有大於0的數字都留給了用戶自己,多麼人性化啊!但是要注意了,如我前面所說,大部分系統都喜歡將大於0作為正確返回,小於0作為錯誤返回,所以很多人(包括我),喜歡用if(result > 0)表示返回成功,這個在android是不通行的,一定要特別注意!
此外在這個程序中,我們可以看到另外一件事情,關於TextView,如果我們要改變裡面的內容,比如增加新的欄位,需要將其設為可變長的,方法是mTextView.setText(mTextView.getText(), TextView.BufferType.EDITABLE);
修改內容的方法是通過TextView.getText()獲取Editable對象,然後Editable對象進行編輯就可以了,Editable類似於StringBuffer,編輯之後會直接反映到TextView裡面,不需要再setText();
2. SaveRestoreState
完全沒有看懂這個Demo要演示什麼效果,好像是onSaveInstanceState以及TextView的android:freezesText屬性有關,但具體效果沒有研究出來,留到以後再研究吧
3.Translucent
Android為透明效果提供了內置的Theme: android:style/Theme.Translucent,只需要把當前的activity的theme設置為這個Theme就可以達到完全透明的效果。
如果要半透明的話,可以增加一個繼承該Theme的style即可,實現如下:
#e0000000
此外API Demo中提供了另一個實例,不用繼承內置的Theme,可以自己完全創建一個新的style,實現透明效果,同時可以加一些其他特效,比如模糊化等,
④ 怎麼在android百度地圖通過經緯度來定位並且顯示出地圖位置
可以參考如下內容:
使用Android自帶的LocationManager和Location獲取位置的時候,經常會有獲取的location為null的情況,並且操作起來也不是很方便,在這個Demo里我使用了網路地圖API中的定位SDK,可以一次性獲取當前位置經緯度以及詳細地址信息,還可以獲取周邊POI信息,同時可以設定位置通知點,當到達某一位置時,發出通知信息等方式來告知用戶。jar包下載以及官方文檔請參照:網路定位SDK,前提是需要注冊網路開發者賬號。
下面來看看定位的基本原理,目前,定位SDK可以通過GPS、基站、Wifi信號進行定位。基本定位流程如下圖所示,當應用程序向定位SDK發起定位請求時,定位SDK會根據當前的GPS、基站、Wifi信息生成相對應的定位依據。然後定位SDK會根據定位依據來進行定位。如果需要,定位SDK會向定位伺服器發送網路請求。定位伺服器會根據請求的定位依據推算出對應的坐標位置,然後根據用戶的定製信息,生成定位結果返回給定位SDK。
⑤ android apidemo在哪
apidemo文件存放位置是在sdk路徑下面,具體如下:
首先,導入API Demos。File->new->project->Android project->Creat project from existing source 選擇API Demos.
導入的文件可以在sdk的文件裡面找到,如XXX/android-8/samples.也可以直接下載如http://dl-ssl.google.com/android/repository/samples-2.2_r01-linux.zip
⑥ 誰有Android的選擇省縣市地址的案例demo,是彈出框形式的,選中省後自動出來省內的城市選擇。。。。。
http://blog.csdn.net/huangxuanheng/article/details/24742439 自己看看有沒有你想要的
⑦ android 高德地圖定位服務啟動失敗 怎麼破
在AndroidManifest中添加
<service android:name="com.amap.api.location.APSService"></service>
此為定位需要的服務,使用2.0以上的定位就需要這個。
在官方提供的demo中其實就已經寫到了,只是新手一般在添加許可權之後就不太會注意到AndroidManifest中的此點。
加上之後定位功能就可以實現了