他山之石,可以攻玉Android開發進階之Intent_第1頁
他山之石,可以攻玉Android開發進階之Intent_第2頁
他山之石,可以攻玉Android開發進階之Intent_第3頁
他山之石,可以攻玉Android開發進階之Intent_第4頁
他山之石,可以攻玉Android開發進階之Intent_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

他山之石,可以攻玉--OPhoneIntent在本教程中,將具體介紹OPhoneIntentIntentOPhone什么是IntentIntentIntent來告知OPhoneOPhone系統會依據IntentIntent有多個局部組成,主要包action、data、category:action--描述IntentACTION_VIEW、ACTION_EDIT、ACTION_MAIN等data --描述IntentUricategory--額外的描述信息其他組成局部請參考Intent“://developer.android/reference/android/content/Intent.html“://developer.android/reference/android/content/Intent.html例如在HelloWorld例如中的AndroidManifest.xml文件中指定activity的Intent據如下:<intent-filter><actionandroid:name=“ent.action.MAIN“/><categoryandroid:name=“ent.category.LAUNCHER“/></intent-filter>其中action為ent.action.MAIN,這說明是一個程序入口,該程序從這里啟動;ent.category.LAUNCHER,這說明是一個啟動程序,類似于windowsOPhoneactivities、services、和broadcastreceivers都可以通過Intent如何使用IntentIntentactivity通訊協作,但是IntentIntent可以使自己開發的程序和OPhone一起,把最好的用戶體驗帶給用戶。例如:在開發程序中需要查看手機中的聯系人信息,你沒必要自己實現該功能,由于OPhone系統本身就帶有聯系人治理的功能,所以只需要使IntentIntent的用戶體驗。假設需要查看的聯系人ID14,則只要在程序中調用如下代碼就可以了。Intentin=newIntent(Intent.ACTION_VIEW);in.setData(Uri.parse(“content://contacts/people/14“));startActivity(in);用戶使用起來就比較便利,不用輸入號碼了。同樣也是通過Intent來調用的:Intentin=newIntent(Intent.ACTION_CALL);in.setData(Uri.parse(“tel:10086“));startActivity(in);另外留意打需要權限許可的,在AndroidManifest文件中添加如下代碼:<uses-permissionandroid:name=“android.permission.CALL_PHONE“></uses-permission>如何查看系統IntentIntentOPhone系統供給的IntentOPhone系統供給那些Intent擔憂,只要借助一個第三方工具就可以逐步探明系統供給那些功能了。每個程序供給的可用Intent都是通過程序的AndroidManifest文件聲明的,但是OPhone系統為了為了優化程序性能,配置文件都是編譯后的代碼,所以需要借助一個反編譯工具來查看該文件,下面就使用聯系人這個程序來作為例如看看如何挖掘一個程序的Intent。預備工作:下載資源文件反編譯工具AXMLPrinter2:“://goodev.googlecode/files/AXMLPrinter2.jar“://goodev.googlecode/files/AXMLPrinter2.jar該工具的使用很簡潔:java-jarAXMLPrinter2.jarAndroidManifest.xml(指定要反編譯的文件)>AndroidManifest.txt(指定輸出文件)探寶流程:啟動模擬器,翻開DDMS中的FileExplorer(Eclispe中的DDMSsystem/appContacts.apk把該程序導出來。OPhonezipwinrarContacts.apk名目構造如以以下圖所示:把里面的AndroidManifest.xml文件解壓出來,并使用命令java-jarAXMLPrinter2.jarAndroidManifest.xml>AndroidManifest.txt來反編譯該文件,反編譯后的文件內容如下:<?xmlversion=“1.0“encoding=“utf-8“?><manifestxmlns:android=“://schemas.android/apk/res/android““://schemas.android/apk/res/android“android:sharedUserId=“android.uid.shared“package=“com.android.contacts“>為了省略篇幅這里內容省略--><activityandroid:label=“Contact“android:name=“ViewContactActivity“android:configChanges=“0x00000080“><intent-filterandroid:label=“ViewContact“><actionandroid:name=“ent.action.VIEW“></action><categoryandroid:name=“ent.category.DEFAULT“></category><dataandroid:mimeType=“vnd.android.cursor.item/person“></data><dataandroid:mimeType=“vnd.android.cursor.item/sim“></data></intent-filter></activity>為了省略篇幅這里內容省略--></manifest>查看里面的ViewContactActivityActivity息的Activity,如何啟動該Activity呢,在里面的ent.action.VIEW并指定為person或則sim利用同樣的方式,就可以看看OPhone系統中的程序都具有那些可用的功能了,例如通過反編譯FileManagerIntentintent=newIntent(“ent.action.PICK“);intent.setType(“oms.android.filemanager/filepick“);startActivityForResult(intent,REQUEST_CODE_PICK_FILE);調用startActivityForResult后,會啟動FileManager的文件。“NoXXXfoundtohandleIntent這里先描述一個場景:小王覺察一個多彩手電筒程序“://code.google/p/openintents4oms/wiki/OIFlashlight)“(://code.google/p/openintents4oms/wiki/OIFlashlight法小王覺察了如何調用顏色選擇器:privatevoidpickColor{Intenti=newIntent;setAction“(org.openintents.action.PICK_COLOR“);i.putExtra“(org.openintents.extra.COLOR“,mColor);startActivityForResult(i,REQUEST_CODE_PICK_COLOR);}在模擬器上安裝OIFlashlight4OMS,經過測試一切正常,但是當小王在真機測試的時候,消滅了特別“NoActivityfoundtohandleIntent”,這樣程序就特別退出了,緣由是手機上沒有安裝OIFlashlight4OMS。這種狀況是不友好的,有沒有方法探測用戶是否安裝了OIFlashlight4OMS,假設用戶沒有安裝,在用戶啟動顏色選擇功能的時候,給用戶個提示告知用戶需要先安裝OIFlashlight4OMS,然后才可以使用該功能,而不是程序特別退出。的顏色在中間的圓形按鈕中顯示,點擊該按鈕返回選擇的顏色解決方案:針對上面的場景,在OMS系統中是有解決方案的:publicstaticbooleanisIntentAvailable(finalContextcontext,finalIntentintent){final PackageManager packageManager =context.getPackageManager;List<ResolveInfo>list=packageManager.queryIntentActivities(intent,CH_DEFAULT_ONLY returnlist.size>0;}isIntentAvailable函數用來推斷該Intent對應的activityactivityIntent,假設有就返回該true,反之返回false。這樣在使用一個Intent前,我們只要先用該函數推斷下就可以了,假設不存在就可以給客戶一個提示,例如:彈出一個對話框詢問用戶是否安裝該程序。下面截圖是鈴聲秀程序中的一個提示截圖:點擊安裝功能,就會調用掃瞄器去下載安裝文件。該功能是通過如下代碼實現的:privatevoidcheckOiFileManager{if(!IntentUtils.isIntentAvailable(this,intent)){finalSharedPreferencesprefs=getPreferences(Context.MODE_PRIVATE);//Checktheuserchoiceintanswer=prefs.getInt(PREF_STATS_OIFILE_CHECK,OIFILE_ASK);if(answer==OIFILE_ASK){newAlertDialog.Builder(RingsExtended.this).setTitle(R.string.oifile_tip_title).setMessage(R.string.oifile_prompt).setPositiveButton(R.string.install_oifile,newDialogInterface.OnClickListener{publicvoidonClick(DialogInterfacedialog,Uri

intwhichButton){uri =Uri.parse(getString(R.string.oifile_install_url));Intent(Intent.ACTION_VIEW);

Intent

intent =

newintent.setData(uri);try{

RingsExtended.this.startActivity(intent);}catch(ActivityNotFoundExceptione){Log.e(TAG,“Errorstartingactivity.“,Toast.makeText(RingsExtended.this,R.string.download_oifile_error,}}

Toast.LENGTH_SHORT).show;}).setNeutralButton(R.string.oifile_ask,newDialogInterface.OnClickListener{publicvoidonClick(DialogInterfacedialog,intwhichButton){prefs

SharedPreferences.Editor.edit;

prefsEditor =prefsEditor.putInt(PREF_STATS_OIFILE_CHECK,OIFILE_ASK);prefsEditormit;}}).setNegativeButton(R.string.oifile_never,newDialogInterface.OnClickListener{publicvoidonClick(DialogInterfacedialog,intwhichButton){prefs

Shar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論