『壹』 如何開發一個簡單的 android Wear 應用程序
你可以選擇Eclipse或AndroidStudio作為AndroidWear的集成開發環境(IDE)。谷歌建議用AndroidStudio進行開發。通過Android的SDK管理者下載API20(4.4KitKatWear):AndroidStudio提供了在現有應用程序中添加AndroidWear支持或創建新項目的便捷方式:AndroidStudio用的是組件模型,其中手機和AndroidWear是單項目的一部分。如果要在AndroidStudio創建一個新項目,點擊文件->新項目。在向導的第二頁,選擇構成因子,確保選擇AndroidWear模塊作為你開發的構成因子(見下圖)。一旦完成所有選項選擇,項目就會自動生成。你會看到這個Android項目有兩個模塊:移動和Wear。移動的使用於手機的應用程序,Wear是在AndroidWear上運行的程序。Wear應用程序不可以作為單獨的軟體包放在谷歌商店裡。你需要把移動和Wear應用程序放在同一個應用程序APK中。當用戶在手機上下載APK時,Wear應用程序就會自動傳到配對的Wear設備。AndroidStudio產生的默認項目並沒有什麼特別。在測試期間,我們需要自己寫代碼,這取決於我們想要應用程序的「可穿戴「執行什麼。通知AndroidWear的開發可以從兩個角度進行分析:通知和AndroidWear應用程序本身(包括在APK文件夾)。對於已經從谷歌商店安裝官方AndroidWear到手機的用戶,以及已經把手機和Wear設備配對的用戶,不需要在應用程序中對通知進行任何更改。雖然這樣說,但為了讓Wear真正發揮作用,有時候更改是有必要的。你可以令通知只出現在手機或可穿戴設備或兩者都有。此外,如上所述,開發商應該想下如何利用用戶界面(UI)優勢——即背景圖像、通知標題、文本等等。創建將發送到可穿戴設備的手持式通知,谷歌建議使用通知兼容生成器。Android的支持庫提供了一系列類別,你需要添加到你的項目中。如果使用AndroidStudio,你需要添加下列屬於移動模塊中的build.gradle文件的編譯時間。compile"com.android.support:support-v4:20.0.+"要創建通知,你可在你的移動應用程序中嘗試下面的代碼:NotificationCompat.Builderbuilder=newNotificationCompat.Builder(this);builder.setContentTitle(「NewAPI」).setContentText(「XYZAPIgotaddedtoFoodCategory」).setSmallIcon(R.drawable.ic_mynotification).setContentIntent(PhoneActivityPendingIntent);然後,你可以根據你的邏輯觸發通知,如下所示:=NotificationManagerCompat.from(this);notificationManager.notify(notificationId,notificationBuilder.build());現在,當用戶在Wear設備上收到通知時,他們在手機上點擊通知或者滑動到左邊就可以啟動等待模式,然後顯示開始動作。作為擴展部分,如果想要通知只出現在手機,你可以通過具體說明setLocalOnly來創建通知。在上面的例子中,我們只顯示了一個卡片,但你可以看下有多頁甚至折疊的通知卡片。可穿戴應用程序雖然AndroidWear支持來自手機的通知,但有時候還不夠。有幾種情況,包括:在手機上收到數據時想要在Wear設備啟動活動;從Wear設備向手機發送信息,反過來執行一些活動或者在後台做點什麼;在Wear設備上創建自定義界面;編寫一個可以在Wear設備上啟動和運行的程序,並且可以通過接收語音輸入啟動不同動作指令。以上提到的都有可能實現,前提是你了解一些WearAPI的基礎知識。連接和數據交換前面提供的案例中,共同的主題是手機和Wear設備都需要一個可連續雙方的機制,然後一旦建立聯系,就需要相互的信息交換。這反過來可以觸發相應設備上的正確指令。手機和可穿戴設備之間的聯系是由谷歌提供服務的。谷歌API客戶端提供了這種聯系的實例。執行實例為了了解全局,我們來看一個實例應用程序,包括手機和Wear組件。為了讓事情簡單化,手機應用程序將會有單獨的活動指令名稱——MainActivity.java。它設計了一個按鈕,點擊時會發送消息到Wear應用程序。首先,讓我們看下MainActivity.java在手機應用程序上的情況(主要方法如下所示):同樣,用戶只要向Wear設備說出「開始【活動名稱】」就可以開始一個活動指令。你所需要做的就是在活動清單中為該活動提供一個文件屬性
『貳』 用Android studio做一個可以運行的小程序,鬧鍾也行,然後可以連到手機,感謝大神。
環境搭建就不講了,直接說開發。
小鬧鍾程序開發中的要點就是:
1、時間選擇對話框(TimePicker)
2、獲取鬧鍾管理器並對其進行設置
3、注冊廣播接收器
掌握了這兩點,寫程序就很簡單了。
1、新建android項目:Alarm,sdk版本選擇2.2,Package name:com.lql.activity,Main Activity:Alarm
2、編寫界面:直接修改layout中的main.xml文件,代碼如下:
Xml代碼
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
>
<Button
android:id="@+id/timeBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/time"
android:textSize="20sp"
/>
<Button
android:id="@+id/cancelAlarmBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancelAlarm"
/>
</LinearLayout>
界面的效果如下:
{
/*(non-Javadoc)
*@seeandroid.content.BroadcastReceiver#onReceive(android.content.Context,android.content.Intent)
*/
@Override
publicvoidonReceive(Contextarg0,Intentdata){
Log.d(Alarm.TAG,"thetimeisup,startthealarm...");
Toast.makeText(arg0,"鬧鍾時間到了!",Toast.LENGTH_SHORT).show();
}
}
這個代碼就很簡單了,主要是要繼 承BroadcastReceiver 這個類,然後重寫onRecive方法。onRecive方法在鬧鍾的時間達到之後會執行,在這里我們可以做自己的事情,比如啟動某個程序,或者播放鈴聲,我這里就是簡單的提示一下,使用的是Toast。
5、在android的AndroidManifest.xml文件中注冊廣播接收器:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Xml代碼
package="com.ql.activity"
android:versionCode="1"
android:versionName="1.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<receiverandroid:name=".AlarmReceiver"android:process=":remote"/>
<activityandroid:name=".Alarm"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-sdkandroid:minSdkVersion="8"/>
</manifest>
核心的配置為<receiver android:name=".AlarmReceiver" android:process=":remote" />,這也是鬧鍾程序的關鍵,如果不做這個配置,那麼時間到了之後,鬧鍾將不會提示。
接下來就是到模擬器上測試,運行截圖如上圖。程序源代碼見附件。
『叄』 如何在Android中實現一個簡單連接網路的應用程序
注意:要執行這節課中描述的網路操作,你應用程序的manifest文件中必須包含以下許可權:1 2<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>選擇一個HTTP客戶端 Choose an HTTP Client大多數網路連接的Android應用使用HTTP發送和接受數據,Android包括兩個HTTP客戶端:HttpURLConnection和Apache HttpClient,它們支持HTTPS,流上傳和下載,
可配置的超時,IPv6以及連接池,在android系統版本為「姜餅」(android2.3)或者更高版本的應用程序中,推薦使用HttpURLConnection,更多關於這個主題的討論,請查看博客Android HTTP 客戶端檢查網路連接 Check the Network Connection在你的應用試圖連接到網路時,應該先檢查網路連接是否可用,可以用getActiveNetworkInfo()和isConnected()方法執行檢查。記住,設備(手機等設備)可能不在網路連接的范圍內,或者用戶禁用了Wi-Fi或者移動數據通道。更多關於此主題的討論,請參看課程管理網路使用
1 2 3 4 5 6 7 8 9 10 11 12publicvoidmyClickHandler(Viewview){...ConnectivityManagerconnMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();if(networkInfo!=null&&networkInfo.isConnected()){// 獲取數據}else{// 顯示錯誤}...}在獨立線程中執行網路連接 Perform Network Operations on a Separate Thread網路操作涉及不可預知的延遲,為了防止不良的用戶體驗,通常的做法是從UI中獨立出線程去執行網路連接操作。AsyncTask類提供了最簡單的從UI線程中獨立出一個新任務的方式。
更多關於此主題的討論,請參看博客多線程性能在下面的代碼片段中,myClickHandler()方法執行了new DownloadWebpageTask().execute(stringUrl).DownloadWebpageTask類是AsyncTask的子類,DownloadWebpageTask實現了下面AsyncTask的方法:
doInbackground()會執行downloadUrl()方法,downlaodUrl()方法將網頁的URL地址作為參數,並獲取和處理網頁的內容,當它處理完這些操作,將會返回一個結果字元串。
onPostExecute()接受返回字元串並顯示在UI上。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 {privatestaticfinalStringDEBUG_TAG="HttpExample";privateEditTexturlText;privateTextViewtextView;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);urlText=(EditText)findViewById(R.id.myUrl);textView=(TextView)findViewById(R.id.myText);}// 當用戶點擊按鈕,調用AsyncTask// 在試圖獲取URL時,確保有一個網路連接publicvoidmyClickHandler(Viewview){// 從UI的text欄位中得到URLStringstringUrl=urlText.getText().toString();ConnectivityManagerconnMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();if(networkInfo!=null&&networkInfo.isConnected()){newDownloadWebpageText().execute(stringUrl);}else{textView.setText("No network connection available.");}}// 使用AsyncTask創建一個獨立於主UI線程之外的任務. 並使用URL字元串創建一個HttpUrlConnection對象。 // 一旦連接建立,AsyncTask則將網頁內容作為一個InputStream對象進行下載。// 最終,InputStream對象會被轉換為一個字元串對象,並被AsyncTask的onPostExecute方法顯示在UI上。{@(String...urls){// 參數來自execute(),調用params[0]得到URLtry{returndownloadUrl(urls[0]);}catch(IOExceptione){return"無法獲取網頁,URL可能無效!Unable to retrieve web page. URL may be invalid.";}}// onPostExecute顯示AsyncTask結果.@(Stringresult){textView.setText(result);}}...}該片段事件順序如下:1.當用戶點擊執行myClickHander()方法的按鈕時,應用會將指定的URL傳遞給AsyncTask的子類DownloadWebpageTask。2.AsyncTask的方法doInBackground()調用downloadUrl()。3.downloadUrl()接收到作為字元串參數傳遞過來的URL,並用它創建一個URL對象。4.使用URL對象創建HttpURLConnection對象。5.一旦創建完HttpURLConnection對象,該對象將會以InputStream對象方式獲取網頁內容。6.InputStream再通過readIt()方法將流轉換為字元。7.最後,AsyncTask的onPostExecute方法將字元顯示在主activity的UI。連接並下載數據 Connect and Download Data在你執行網路事務的線程中,你可以使用HttpURLConnection執行GET方法下載數據,在你調用了connect()方法後,你可以通過調用getInputStream()方法得到數據的InputStream對象。
在下面的代碼片段中,doInBackground()方法調用了downloadUrl()方法。downloadUrl方法接收給過來的URL,並使用它通過HttpURLConnection對象連接到網路。一旦連接成功,應用將使用getInputStream()方法獲得InputStream對象數據。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31// 給一個URL,建立HttpUrlConnection對象並作為流對象(InputStream)獲取網頁數據,最後返回一個字元串。privateStringdownloadUrl(Stringmyurl)throwsIOException{InputStreamis=null;// 先顯示獲取到的前500個位元組// 網頁內容intlen=500;try{URLurl=newURL(myurl);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setReadTimeout(10000/*milliseconds*/);conn.setConnectTimeout(15000/*milliseconds*/);conn.setRequestMethod("GET");conn.setDoInput(true);// 開始查詢conn.connect();intresponse=conn.getResponseCode();Log.d(DEBUG_TAG,"The response is: "+response);is=conn.getInputStream();// 將InputStream轉化為stringStringcontentAsString=readIt(is,len);returncontentAsString;// 確保當app用完InputStream對象後關閉它。}finally{if(is!=null){is.close();}}}注意:getResponseCode()方法返回的是連接狀態碼,它是獲取更多關於連接信息的有效方式。狀態碼200表示連接成功。