第1章 Android簡介
本章介紹了Android的誕生、特點以及開發環境的搭建。
第2章 Android簡單控制項的開發及應用
本章通過25個實例以分類的方式簡單介紹了各個基本控制項的應用。通過本章的學習,初學者可以做幾個簡單的實例。
第3章 Android高級控制項的開發及應用
本章通過18個實例以分類的方式詳細介紹了Android平台下高級控制項的應用。通過本章的學習,讀者可以做出稍微復雜點的實例。
第4章 手機用戶界面的開發
本章通過15個實例介紹了Android平台下基於界面的開發,主要有界面響應事件、定時改變Toast消息以及使用Bundle實現Activity間的數據傳送等。
第5章 手機通信服務及手機控制
本章通過20個實例介紹了手機通信服務以及手機桌面背景的切換,以及查看手機SIM卡的信息。
第6章 手機的自動服務功能
本章通過15個實例介紹了Android手機自動服務功能,主要有提醒用戶收簡訊、查看手機電池剩餘電量、更改手機模式等。
第7章 手機文件I/O與資料庫的應用
本章通過8個實例介紹了有關Android手機的文本閱讀、文件管理,以及Android手機端Sqlite資料庫的應用。
第8章 手機網路應用
本章通過16個實例介紹了手機網路組件的應用,有自定義手機瀏覽器、網路音樂的播放,以及網路下載數據等。
第9章 手機的Google服務功能
本章通過6個實例介紹了Google服務功能的實現,有手機端的Google賬號的登錄、製作成績柱狀圖,以及Google地圖的實現等。
第10章 手機多媒體服務功能
本章通過14個實例為讀者介紹了手機的多媒體服務功能,包括音頻、視頻的採集,以及2D游戲的開發。
第11章 Android手機的3D世界
本章通過8個實例為讀者介紹了3D的一部分基礎技術,每一項技術通過深入剖析其原理,並通過實例對其進行了詳細的講解,相信讀者一定會受益匪淺。
第12章 手機特效開發
本章通過12個實例向讀者介紹了Android中手機特效的開發,在Android平台下開發,可能會使用到其中的一些特效,希望讀者可以靈活地運用本章中的手機特效。
第13章 休閑游戲——Q版瘋狂大炮
本章通過30個實例介紹了Android 2D游戲《Q版瘋狂大炮》的開發,主要介紹了2D的貼圖技術,以及碰撞檢測的開發。
第14章 娛樂游戲——3D迷宮
本章通過13個實例介紹了Android 3D游戲《3D迷宮》的開發,主要介紹了大范圍貼圖技術和地圖設計器的應用。
『貳』 Android上如何用C語言編程
害哥搞這個離線包搞了個把小時。為了清楚,上個圖: 敲個LS,什麼東西都沒有,這個目錄是cygwin的安裝目錄下面的home文件夾下的用戶名文件夾。接下來是配置與Android相關的。在home/用戶名,這個文件夾下有一個文件為.bash_profile,打開它,到最後添加兩行NDK的環境變數:NDK_ROOT=/cygdrive/d/android-ndk-r6export NDK_ROOT上面的意思是,ndk的目錄是,d:/android-ndk-r6添加完之後,關閉Cygwin重新啟動一下,然後敲入cd $NDK_ROOT,是否進入到ndk的目錄了?否則就看看哪個字母錯了。在ndk的目錄下samples下有很多例子,隨便弄個就可編譯了。下面是新建一個項目,以對C語言在項目中的位置更清楚。打開Eclipse新建一個Android項目,取名hellojni,為了清晰,便於維護,及各種各樣的好處,JNI的java代碼單獨一個類,單獨一個包。其實最好能不用JNI就別用JNI,這東西負作用巨大,特別是在用到JNI復雜的地方,什麼內存啊,類型啊,哪裡調用的方法,異常啊,可靠性都非常麻煩。非要用JNI的復雜功能,做好兩件事,做之前充分設計,設計之前充分學習一下JNI文檔。當然對於一些簡單的應用,那隻需要充分仔細。作好參數,返回值的檢查,記得釋放內存就行了。
『叄』 android編程
Android以Java為編程語言,使介面到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個 Activity 類(class)負責創建視窗(window),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到復數程序同時運行的效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(stopped),甚至被系統清除(kill)。
View等同於J2ME的Displayable,程序人員可以通過 View 類與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結合在一起,每一個View都可以注冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向Android框架注冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。
『肆』 如何在Android上編寫高效的Java代碼
Java平台一般有三個版本:Java ME(微型版,用於某些手機)、Java SE(標准版,用於台式電腦)、Java EE(企業版,用於伺服器端應用)。在談到Java時,我們通常是指Java SE,因為只有這個版本包含虛擬機和編譯器。
首先,Java代碼會被編譯成稱為位元組碼的中間格式。當位元組碼在目標電腦上運行時,虛擬機會快速將它解析成目標電腦硬體和操作系統所需要的本機格式。
除了為開發者提供「一次編寫,到處運行」的優勢,Java還能通過垃圾回收器(GC)實現自動內存管理,開發者可免去手動在代碼中釋放無用對象的內存。雖然這個功能非常有用,且大大降低了在代碼中引入內存問題的風險,但是它會增加運行時的開銷,因為需要不停地執行垃圾回收進程。
本文開頭將比較Java SE和用於Android開發的Java之間的差異。首先我會介紹開發者習慣的Java
SE語言結構以及它們是如何在Android上運行的。其次,我會介紹如何優化Android中的Java代碼,如何優化內存分配,以及如何恰當地處理多線程。
比較Android上的Dalvik Java和Java SE
雖然遠在Android出現之前,開發者就能用Java編程語言為移動設備編寫應用程序,但它只是Java中功能極為有限的一個版本,稱為Java
ME(微型版)。不同的移動設備還需編寫不同的代碼,因此,寫一個應用程序就能在支持Java
ME的任何手機上運行是幾乎不可能的。此外,由於當時不存在很好的在線商店,應用發布過程極其復雜。
Android的問世為開發者提供了構建智能手機強大應用的機會,開發者只需用Java編程語言以及他們熟知的標准Java
API編寫代碼。然而,盡管Android開發者仍使用Java SE編譯器來編譯應用程序,你會發現,James
Gosling開發的Java和Android設備上的Java存在許多不同之處。
在Android設備上運行的VM(虛擬機)稱為Dalvik。它最初由谷歌的Dan
Bornstein開發,適用於CPU和內存受限的移動設備。Java SE和Dalvik Java存在一些差異,主要體現在虛擬機上。Java
SE使用了棧機設計,而Dalvik被設計成了基於寄存器的機器。Android SDK中有一個dx工具,它會把Java
SE棧機器的位元組碼轉換成基於寄存器的Dalvik機器位元組碼,該轉換步驟由IDE自動完成。
基於棧的虛擬機和基於寄存器的虛擬機的定義以及差異將不列入我們的討論范圍。由於歷史原因,Android使用基於寄存器的虛擬機。雖然基於寄存器的虛擬機最多可以比基於棧的虛擬機快32%,但這只限於執行時解釋位元組碼的虛擬機(也就是說,解釋型虛擬機)。在Android
2.2版本(也稱為Froyo)之前,Dalvik虛擬機都是純解釋型的。Froyo版本引入了JIT編譯器(即時編譯),這是Java
SE很早就有的一個優勢。
JIT編譯,也稱為動態翻譯。它在執行前把位元組碼翻譯成本機代碼(如圖1所示),這樣主要有兩個好處。首先,它消除了那些純解釋型虛擬機的開銷;其次,它能對本機代碼執行優化,這通常是靜態編譯代碼無法做到的。例如,JIT編譯器可以在它運行的CPU上選擇最合適的優化,也可以根據應用程序的輸入來分析代碼是如何運行的,以便進行下一步的優化。
圖1Android Java和Java SE翻譯步驟
雖然Android的Dalvik JIT編譯器有很大的發展前景,但要達到如Java SE的JIT編譯器般穩定、成熟度尚需很長一段時間。不過,Dalvik JIT的出現為Android提供了巨大的性能優勢,而且它也在不斷得以改善。
JAVA
SE虛擬機和Dalvik虛擬機的另一個區別是,後者進行了優化,可運行在同一個機器上的多個實例中。它在開機時會啟動一個叫做zygote的進程,該進程會創建第一個Dalvik實例,由這個實例創建所有其他的實例。當應用程序啟動時,zygote進程會收到一個創建新虛擬機實例的請求,並給該應用程序創建一個新進程(如圖2所示)。如果開發者已習慣於Java
SE開發,這樣的設計可能看起來不切實際,但它有一個很大的優勢,可以避免由一個應用程序運行失敗導致Dalvik虛擬機崩潰,繼而引發多應用程序崩潰。
圖2在Android中啟動新Dalvik虛擬機實例
Android和Java
SE除了運行的虛擬機不同之外,它們實現API的方式也不一樣。Android中屬於java和javax包中的API都來自Apache
Harmony(這是一個開源項目,旨在重新實現Java SE軟體棧,該項目從2011年11月不再維護)。在開發方面,這些API和Java
SE包中的類似,但也存在一些差別。例如,谷歌對HttpUrlConnection類進行了Java SE版本中所沒有的重大升級。
此外,Android平台移除了Java
SE中無關的API。例如,Swing/AWT包被完全移除,因為Android使用不同的UI框架。其他被移除的API還有RMI、CORBA、ImageIO和JMX。它們或者被替換為特定的Android版本(在android包空間內),或者因為一些實際原因根本不存在。
優化Android上的Java代碼
經過多年的改進,Java
SE具備了一些簡化編寫復雜代碼結構的新特性。其中的一些特性會讓整個流程變得更簡單,但開發者需要了解何時以及如何正確地使用它們。另外,由於Java
SE大多用於伺服器端開發(使用Java企業版的API),因而開發人員專門對伺服器端Java代碼進行了優化。註解和Java虛擬機對腳本語言的支持就是對伺服器端開發進行優化的例證。雖然這些工具在構建後端開發時很強大,但在開發Android客戶端代碼時,這些特性的作用很小,甚至起反作用。Java開發者已經習慣於無限量的RAM和CPU,而Android開發需要密切關注性能和內存分配。簡單地說,開發者需要使用稍微不同的方法對待Android和後端的開發。
然而,隨著Android的首次發布,情況有所改變。曾經一些在Android上盡量不用的Java規范重新被推薦,這主要因為Android目前的JIT編譯器解決了這些規范導致的性能問題。
本文將討論編寫Android應用程序需要了解的Java代碼。我們不會深究Java編程語言的細節,而是重點關注對Android開發重要的東西。不過,開發者仍需了解,大多數適用於Java SE的規則和建議同樣適用於Android和Dalvik虛擬機。
Android上的類型安全枚舉
Java SE 5.0新增了許多方便開發者的新特性。其中最值得期待的是引入了類型安全枚舉。枚舉在代碼中用來表示屬於某一組的幾個選擇。在早期版本的Java中,可以用多個整型常量解決這個問題。雖然這在技術上可行,但是很容易出錯。請看下面的代碼:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
問題是,雖然這些常量是期望的,但是沒有機制保證setState()方法接收不同的值。如果要在設置方法中添加檢查,那麼一旦得到的是非預期值,開發者就需要處理錯誤。開發者所需要的是在編譯時檢查非法賦值。類型安全的枚舉解決了這個問題,如下所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = State.STOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意在聲明不同類型安全值的地方新加的內部枚舉類。這在編譯時就會解決非法賦值的問題,所以代碼更不容易出錯。
如果Dalvik虛擬機還沒有JIT編譯器優化代碼,不建議在Android平台上使用枚舉類型,因為和使用整型常量相比,這種設計帶來的內存和性能損失更大。這就是為什麼在一些老版本的Android
API中還存在如此多的整型常量的原因。如今有了更強的JIT編譯器以及一個不斷改進的Dalvik虛擬機,開發者不必再擔心這個問題,放心大膽地使用類型安全枚舉即可。
然而,仍然存在一些情況使用整型常量是更好的選擇。像int這樣的Java基本類型,不會增加GC的開銷。此外,Android SDK中許多已有的API仍然依賴基本類型,比如Handler類——在這種情況下,你沒有太多的選擇。
Android中增強版的for循環
Java SE 5.0還引入了增強版的for循環,提供了一個通用的縮寫表達式來遍歷集合和數組。首先,比較以下五種方法:
void loopOne(String[] names) {
int size = names.length;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection<String> names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection<String> names) {
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
printName(iterator.next());
}
}
// 不要在ArrayList上使用增強版的for循環
void loopFive(ArrayList<String> names) {
int size = names.size();
for (int i = 0; i < size; i++) {
printName(names.get(i));
}
}
上面顯示了四種不同遍歷集合和數組的方式。前面兩種有著相同的性能,所以如果只是讀取元素的話,可以放心地對數組使用增強版for循環。對Collection對象來說,增強版for循環和使用迭代器遍歷元素有著相同的性能。ArrayList對象應避免使用增強版for循環。
如果不僅需要遍歷元素,而且需要元素的位置,就一定要使用數組或者ArrayList,因為所有其他Collection類在這些情況下會更慢。
一般情況下,如果在讀取元素幾乎不變的數據集時對性能要求很高,建議使用常規數組。然而,數組的大小固定,添加數據會影響性能,所以編寫代碼時要考慮所有因素。
隊列、同步和鎖
通常情況下,應用程序會在一個線程中生產數據,在另一個線程中使用它們。常見的例子是在一個線程中獲取網路上的數據,在另一個線程(操作UI的主線程)中把這些數據展現給用戶。這種模式稱為生產者/消費者模式,在面向對象編程課程中,開發者用演算法來實現該模式可能要花上幾個小時。下面會介紹一些簡化生產者/消費者模式實現的現成類。
1. 更智能的隊列
雖然已有現成的類並能用更少的代碼實現該功能,但許多Java開發者仍然選擇使用LinkedList以及同步塊實現隊列功能。開發者可在java.util.concurrent包中找到同步相關的類。此外,本包還包含信號量、鎖以及對單個變數進行原子操作的類。考慮下面使用標準的LinkedList實現線程安全隊列的代碼。
public class ThreadSafeQueue {
private LinkedList<String> mList = new LinkedList<String>();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mList.offer(value);
mLock.notifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mList.isEmpty()) {
try {
mLock.wait();
} catch (InterruptedException e) {
//簡潔起見忽略異常處理
}
}
return mList.poll();
}
}
}
雖然這段代碼是正確的,並有可能在考試中得滿分,但實現和測試這樣一段代碼只是在浪費時間。實際上,所有前面的代碼可用下面一行代替。
LinkedBlockingQueue<String> blockingQueue =
new LinkedBlockingQueue<String>();
上面的一行代碼能像前面的例子一樣提供相同類型的阻塞隊列,甚至能提供額外的線程安全操作。java.util.concurrent包含許多可選的隊列以及並發映射類,所以,一般情況下,建議使用它們,而不是像之前的示例那樣使用更多代碼。
2. 更智能的鎖
Java提供的synchronized關鍵字允許開發者創建線程安全的方法和代碼塊。synchronized關鍵字易於使用,也很容易濫用,對性能造成負面影響。當需要區分讀數據和寫數據時,synchronized關鍵字並不是最有效的。幸好,java.util.concurrent.locks包中的工具類對這種情況提供了很好的支持。
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLock.WriteLock writeLock = mLock.writeLock();
try {
writeLock.lock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLock.unlock();
}
}
public String getName() {
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
}
// 重復代碼不再贅述
}
上面的代碼展示了在什麼地方使用ReentrantReadWriteLock,它允許多個並發線程對數據進行只讀訪問,並確保同一時間只有一個線程寫入相同的數據。
在代碼中使用synchronized關鍵字仍然是處理鎖問題的有效方法,但無論何種情況下,都要考慮ReentrantReadWriteLock是否是
『伍』 如何利用Android編程實現GPS定位
您好,很高興為您解答。
一、准備工作
需要如下三種軟體:
1. Eclipse
2. Android SDK
3. 開發Android程序的Eclipse 插件
為了開始我們的工作,首先要安裝Eclipse,然後從Google的網站獲得Android SDK,並且安裝Eclipse插件。
二、Activity類
每一種移動開發環境都有自己的基類。如J2ME應用程序的基類是midlets,BREW的基類是applets,而Android程序的基類是 Activity。這個activity為我們提供了對移動操作系統的基本功能和事件的訪問。這個類包含了基本的構造方法,鍵盤處理,掛起來恢復功能,以 及其他底層的手持設備的訪問。實質上,我們的應用程序將是一個Activity類的擴展。在本文中讀者將會通過例子學習到如何使用Activity類來編 寫Android程序。下面是一個簡單的繼承Activity的例子。
{
publicvoidonCreate(Bundleparams){
super.onCreate(params);
setContentView(R.layout.main);
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
returntrue;
}
}
三 View類
View類是Android的一個超類,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用於繪畫的畫布。這個畫布可以用 來進行任意擴展。本文為了方便起見,只涉及到了兩個主要的View類型:定義View和Android的XML內容View。在上面的代碼中,使用的是 「Hello World」 XML View,它是以非常自然的方式開始的。
如果我們查看一下新的Android工程,就會發現一個叫main.xml的文件。在這個文件中,通過一個簡單的XML文件,描述了一個屏幕的布局。這個 簡單的xml文件的內容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHoriz
android:text=""
/>
</RelativeLayout>
上面的內容的功能看起來非常明顯。這個特殊文件定義了一個相關的布局,這就意味著通過一個元素到另一個元素的關系或是它們父元素的關系來描述。對於視圖來 說,有一些用於布局的方法,但是在本文中只關注於上述的xml文件。
RealtiveLayout中包含了一個填充整個屏幕的文本框(也就是我們的LocateMe activity)。這個LocateMe activity在默認情況下是全屏的,因此,文本框將繼承這個屬性,並且文本框將在屏幕的左上角顯示。另外,必須為這個XML文件設置一個引用數,以便 Android可以在源代碼中找到它。在默認情況下,這些引用數被保存在R.java中,代碼如下:
publicfinalclassR{
publicstaticfinalclasslayout{
publicstaticfinalintmain=0x7f030001;
}
}
視圖也可以被嵌套,但和J2ME不同,我們可以將定製的視圖和Android團隊發布的Widgets一起使用。在J2ME中,開發人員被迫選擇 GameCanvas和J2ME應用程序畫布。這就意味著如果我們想要一個定製的效果,就必須在GameCanvas上重新設計我們所有的widget。 Android還不僅僅是這些,視圖類型也可以混合使用。Android還帶了一個 widget庫,這個類庫包括了滾動條,文本實體,進度條以及其他很多控制項。這些標準的widget可以被重載或被按著我們的習慣定製。現在讓我們來進入 我們的例子。
四、Android實例
這個演示應用程序將演示了用戶的當前的經度和緯度(在文本框中顯示)。onCreate構造方法將和上面的例子基本相同,除了在其中加入了鍵盤處理,現在 讓我們看一下onKeyDown的代碼。
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode!=KeyEvent.KEYCODE_DPAD_CENTER||m_bLoading)
{
returntrue;
}
m_bLoading=true;
getLocation();
returntrue;
}
下面讓我們來解釋一下這段代碼,首先,這段代碼檢查了當前被按下的鍵,但還沒有開始處理。而是在getLocation方法中處理這一切的。然後,將裝載 flag標志以及調用getLocation方法,下面是getLocation方法的代碼。
privatevoidgetLocation(){
Locationloc;
LocationManagerlocMan;
LocationProviderlocPro;
List<LocationProvider>proList;
setContentView(R.layout.laoding);
locMan=(LocationManager)getSystemService(LOCATION_SERVICE);
proList=locMan.getProviders();
locPro=proList.get(0);
loc=locMan.getCurrentLocation(locPro.getName());
Lat=(float)loc.getLatitude();
Lon=(float)loc.getLongitude();
CreateView();
setContentView(customView);
}
到這為止,程序開始變得更有趣了。但是不幸的是,Google關於之方面的文檔還是比較少了。在程序的變數聲明之後,我們需要演示一些裝載信息。 R.layout.loading符合了另一個簡單的XML布局視圖。通過簡單地調用setContentView方法可以使用轉載信息重繪屏幕。
讀者要注意的是:在編譯時,Android會預先將所有的XML布局數據包裝起來。如果我們想在編譯後變化布局屬性,按著規定,我們必須在源程序中做這些 事。
獲得LocationManager的唯一方法是通過getSystemService()方法的調用。通過使用LocationManager, 我們可以獲得一個位置提供者的列表。在一個真實的手持設備中,這個列表包含了一些GPS服務。實際上,我們希望選擇更強大,更精確,最後不帶有其他附加服 務的GPS。現在,在模擬器中提供了一個用於測試的GPS,這個GPS來自San Francisco。定製的GPS文件可以可以被上傳,並進行測試。如果我們要測試更復雜的應用,來自San Francisco的GPS可能並不適合。
目前我們可以使用位置管理器和位置提供者進行getCurrentLocation的調用。這個方法返回本機的當前位置的一個快照,這個快照將以 Location對象形式提供。在手持設備中,我們可以獲得當前位置的經度和緯度。現在,使用這個虛擬的手持設備,我們可以獲得這個例子程序的最終結果: 建立了顯示一個定製的視圖。
五、使用定製視圖
在最簡單的窗體中,一個Android中的視圖僅僅需要重載一個onDraw方法。定製視圖可以是復雜的3D實現或是非常簡單的文本形式。下面的 CreateView方法列出了上面看到的內容。
publicvoidCreateView(){
customView=newCustomView(this);
}
這個方法簡單地調用了CustomView對象的構造方法。CustomView類的定義如下:
{
LocateMeoverlord;
publicCustomView(LocateMepCtx){
super(pCtx);
overlord=pCtx;
}
publicvoidonDraw(Canvascvs){
Paintp=newPaint();
StringsLat="Latitude:"+overlord.getLat();
StringsLon="Longitude:"+overlord.getLon();
cvs.drawText(sLat,32,32,p);
cvs.drawText(sLon,32,44,p);
}
}
這個定製的Android視圖獲得了經度和違度的測試數據,並將這些數據顯示在屏幕上。這要求一個指向LocateMe的指針,Activity類是整 個應用程序的核心。它的兩個方法是構造方法和onDraw方法。這個構造方法調用了超類的構造方法以及引起了Activity指針的中斷。onDraw方 法將建立一個新的Paint對象(這個對象封裝了顏色、透明度以及其他的主題信息),這個對象將會訪問顏色主題。在本程序中,安裝了用於顯示的字元串,並 使用畫布指針將它們畫到屏幕上。這個和我們了解的J2ME游戲的畫布看起來非常類似。
六、Android展望
從純粹的開發觀點看,Android是一個非常強大的SDK。它使用基於XML的布局和定製視圖聯合了起來。並可以使用滾動條、地圖以及其他的組件。所以 的這一切都可以被重載,或由開發人員來定製。但它所提供的文檔非常粗糙。在文檔中並沒有象SMS等技術,但是從整體上來看Android SDK,還是非常有希望的。也非常符合Google承諾的「First Look」SDK。現在我們要做的就是等待Google發布第一個基於Android的手機,並使用它。
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~O(∩_∩)O~
『陸』 如何編寫安卓軟體
問題一:如何用eclipse編寫安卓程序 方法/步驟
1
1)首先,下載android SDK.介紹一種非常簡單的方法,一並下載eclipse.在網路中輸入android SDK,進入搜索界面。選中第一條。
2)如果你已經有eclipse,你可以直接在eclipse中進行android SDK插件的安裝。方法就是點擊上面菜單里的help,選擇install new software進行添加SDK。具體方法見經驗如何在eclipse中添加android SDk。
2
進入下載界面後,選擇適合自己電腦的SDK進行下載。這里下載的是android開發工具,非常的簡單實用,不需要我么重新下載eclipse,在這個下載包中會自帶一個eclipse FOR android的develop工具,我們直接在裡面就可以進行android的開發。
3
下載完成後解壓,解壓後我們進入文件名為eclipse的文件夾中。點擊eclipse應用程序,運行。運行如圖,和我們常用的eclipse是不一樣的因為這個是android的開發工具,只適用於開發android。裡面有好的插件已經提供給我們,不需要再進行安裝。
4
進入eclipse界面後,開始新建android項目。輸入新建項目名,如果沒有特殊要求,點擊next一直至最後完成。開始的配置只是一個大體的框架的構建,這些我們可以以後進行修改,最總要的還是代碼的編寫。
5
所有配置都完成後就可以開始進行android的開發了。如圖:
進行android開發的時候建議不要用拖拽控制項的方式,建議直接編寫代碼。
END
java環境變數配置
1
這里順便介紹一下java環境變數的配置。
1)首先打開環境變數的界面,添加一個JAVA_HOME的值。右擊計算機屬性,在左側有高級設置,進入後就會看見環境變數選項了。
2)在系統變數中建立java_home,將你的java SDK所在的路徑放在裡面。
2
建立classpath。同樣在系統變數中新建一個classpath,在下面輸入.;即可,不用輸入其他的值。
3
運行cmd,測試。按win+R打開命令面板,輸入cmd,進入後輸入java -version然後回車,接著輸入javac,回車,看結果是否與下圖相同。
這里需要注意的是java -version的java後面是有空格的。
問題二:如何開發安卓第一個程序Hello World 1
打開eclipse集成sdk開發環境,點擊菜單file――》new――》Android application新建安卓項目
2
輸入工程名,項目名,還有包名,點擊下一步。
3
信心勾選不要更改,點擊下一步。
4
這個步驟是選擇應用的啟動圖標,如果想改就改,不想改就點擊下一步
5
選中blackActivity,點擊下一步
6
輸入activity的名稱,main的名稱,點擊下一步。
7
項目創建好了,右鍵要啟動的項目,run as 選中Android application啟動項目
8
然後模擬器啟動好之後,點擊查看,helloworld就創建好了
問題三:如何自學 Android 編程 因為項目需要,8月中旬開始決定做安卓的程序,所以馬上就開始學習安卓方面的開發知識,把最近的學習實踐經歷和大家分享分享。不要一開始就下載一大堆資料,視頻,然後就不知道做什麼了,要給自己定個目標,我要做什麼?我怎麼達到目標?
我不懂java,但是懂C#和C++,所以我沒主張去單獨學習java語言,如果你是個最最初的新手,沒啥語言基礎,那你必須先看看java語言,不要很詳細看,因為學習Android中,你也是在學習java。
1. 明確目標
沒有目標的學習,會感覺到後面沒什麼成果,在1年前,我也打算學習android開發的,但是目的就是學習,到網上去下載很多學習的視頻,然後把開發環境搭建起來,能把Helloworld運行起來,能打些log,Activity之間也能互相切換了,但是後面也就不了了之了,因為不知道學了要干什麼。依葫蘆畫瓢的做了幾個例子,因為裡面的問題都是已經解決的,所以也沒能深入的系統學習。
這次因為產品的需要,要做Android版本,要做的東西一開始就已經設計好了,見搖搖2選1安卓版本,剛開始也不知道裡面有些什麼技術難度,但是要做的目標已經明確了,而且也沒有現成的,碰到問題就查資料,慢慢地解決,這樣有的放矢,學習的效果非常好。既有現成的技術可以使用,又有些技術,需要查比較多的資料,這樣記憶就比較深刻,所掌握的知識也比較系統。
接下來的一系列文章,我會把在開發搖搖2選1中遇到的問題,給大家詳細講講,程序雖然小,但是五臟俱全,做Demo和做產品的要求完全不是一個級別,如果Android大牛感覺知識講的比較淺,那可以繞道,畢竟我是從一個完全的新手開始的。
2. 了解安卓開發中比較困難的地方
學習一個新平台,就要知道此平台開發要面臨的困難有哪些,不要做到最後,這些問題沒有考慮,那就比較糟糕了。在網上搜索了下,安卓開發困難總結如何:
1)安卓系統版本比較多,各版本之間的兼容性是個問題,此為系統碎片。
2)安卓設備千變萬化,設備難以統一,每個產品都成為獨立,分散的Android碎片。
3)解析度五花八門。一個產品,可能需要多個界面排版,人工消耗比較大。
看到這張圖,有沒有頭疼的感覺?
總結成一句話:Android的碎片化真是要來開發者的命。
3. 搭建開發環境
巧婦難為無米之炊,開發環境肯定是第一件要做的事情,這類的文章已經很多了,我也不多說了,多說也就比較無聊了。感謝吳秦,也是博客園里的一員,他寫的很詳細了,見這里。
4. 查看網友總結的一些經驗。
不是什麼都查看,開發中遇到什麼問題,就去查看什麼問題,這樣你查到的知識,馬上就能深入的實踐,這樣知識就鞏固了。
1)首先當然要看Android的開發文檔,裡面其實大部分的知識都有了,還有就是SDK自帶的Samples。
2)博客園里搜索「Android開發」,會出來一大把,很多網友都是很系統的講解了。
3)eoe
android社區,裡面有很多網友上傳了現成的demo代碼,裡面很多都是模仿現在流行的產品的界面開發,很是不錯。
5. 掌握調試方法
個人一直認為,調試技巧是開發中最重要的技能,如果調試技能比較差,不知道如何查找問題,那不會是個好的程序員,其技能也不會高到哪裡去。
Android做下來,感覺調試這塊做的很不錯了,這要感謝Eclipse
IDE做的比較不錯,但是Android的界面排版部分,真的不敢恭維,Eclips......>>
問題四:如何用c++寫安卓手機軟體? 這個你不容易,安卓是java寫的,你學過C和C++想寫安卓軟體既需要學java語言,又需要學安卓手機的介面,相當於新學,不天天學兩三年寫不出什麼東西的。建議寫個win7能用的加殼程序,現在的殼基本上是以前系統上的,win7實用的不多。
問題五:怎樣編寫安卓手機程序???用什麼軟體編寫 。 說具體點 。 樓主看一下這個教程,或許能幫到您。 pan./...703809
問題六:怎樣將自己寫的程序放到android手機里運行 你是用ECLIPSE開發的程序吧?
如果是的話可以先USB接上手機和電腦,手機打開調試模式然後直接在項目上右鍵 -伐> 運行方式 -- > android application 可以直接運行
APK文件的話在項目的BIN目錄下面
問題七:安卓軟體怎麼寫 寫安卓程序的話有好多平台,常用的就是eclipse和myeclipse,我場做安卓開發都是用這兩個平台。安裝起來也方便,當然,如果您的水平高的話可以直接記事本寫代碼再編譯。。。
問題八:安卓開發軟體歡迎界面怎麼做 顯示一個載入的界面,增加一個延時任務。比如用handler,幾秒後再執行跳轉到主界面。
問題九:如何學習安卓軟體開發 200分 你把android sdk中的開發文檔下載到本地,然後eclipse中就有javadoc顯示了,你就能在代碼里看到每個庫函數的用法了。書的話我建議買 精通Android2 ,或者 Android2高級編程 這兩本書,講解的細致,但是一定要結合sdk來看。國內的不要買。。。。(切身體會,千萬別買)看完之後就可以自己動手做做項目了。對於java基礎,我現在的感覺是 如果要深入學習android平台,java基礎一定要好(里邊包括各種java類庫的用法,本地代碼jni什麼的)。但如果平時隨便做做應用的話,會面向對象編程就完全可以了。