導航:首頁 > 操作系統 > android顯示intent

android顯示intent

發布時間:2025-04-26 08:06:34

1. android 為什麼採用intent 進行數據交互

Android系統的一個重要特性就是一個應用程序可以調用另外一個應用程序來完成用戶的請求動作。比如你的應用程序需要給用戶顯示一個地理位置在地圖上,你不必在你的應用程序中實現地圖功能,而是創建一個顯示這個地理位置的Intent,發送出去,Android系統會啟動那些可以處理這個請求的應用程序。還比如:你用網路雲盤下載了一個pdf文檔,你在點擊打開這個文檔的時候網路雲盤是無法打開的,但是也許你系統上安裝有其他的能打開pdf文檔的閱讀器,這個時候就會彈出一個對話框,列舉了可以打開pdf文檔的應用程序,你可以自由選擇一個應用程序打開你下載的文檔。

使用隱式Intent:

隱式Intent不會指明要啟動的組件名稱,而是聲明執行的動作,動作指定了你想要做什麼事情,比如顯示(view),編輯(edit),發送(send),獲取一些東西(get something)等。Intent經常會附帶一些數據,比如你要查看的地址,發送郵件的內容等。數據形式依賴於你想要做什麼事情,數據可以是一個Uri,也可以是其他數據類型(基本數據類型或者對象)之一。數據不是必須的,你的Intent中可以不包含data。

2. android 顯示intent和隱士inent的區別

以下內容為CSDN上(網名:yuan1590)對安卓顯示意圖和隱身意圖的總結(ps前人種樹,樹,後人乘涼,所以我就粘過來了,希望幫到您):
1. Intent
Android基本的設計理念是鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) ,
Intent提供了一種通用的消息系統,它允許在你的應用程序與其它的應用程序間傳遞 Intent 來執行動作和產生事件。
使用 Intent 可以激活 Android 應用的三個核心組件:活動(Activity)、服務(Service)和廣播接收器(BroadcastReceiver)。

2. 顯式意圖、隱式意圖
Intent可以劃分成顯式意圖和隱式意圖。
顯式意圖:調用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明確指定了組件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個組件。
如: 在 MainActicity 中打開一個新的 Acticity -- OtherActivity
1. Intent intent = new Intent();
2. intent.setComponent(new ComponentName(MainActivity.this, OtherActivity.class));
3. 第二行代碼可以更換為:intent.setClass(MainActivity.this, OtherActivity.class);
4. 也可以使用構造器來指定組件: Intent intent = new Intent(MainActivity.this, OtherActivity.class)
三種 「顯式意圖」 指定方式等價
隱式意圖:沒有明確指定組件名的Intent為隱式意圖。
Android系統會根據隱式意圖中設置的動作(action)、類別(category)、數據(data: URI和數據類型)找到最合適的組件來處理這個意圖
例如撥打電話的意圖:
Uri uri = Uri.parse("tel:" + phoneCode);
Intent intent = new Intent(Intent.ACTION_CALL, uri);

對於隱式意圖,Android是怎樣尋找到這個最合適的組件呢?記的前面我們在定義活動時,指定了一個intent-filter,Intent Filter(意圖過濾器)其實就是用來匹配隱式Intent的,當一個意圖對象被一個意圖過濾器進行匹配測試時,只有三個方面會被參考到:動作、數據(URI以及數據類型)和類別。

動作測試(Action test)
一個意圖對象只能指定一個動作名稱,而一個過濾器可能列舉多個動作名稱。如果意圖對象或過濾器沒有指定任何動作,結果將如下:
+ 如果過濾器沒有指定任何動作,那麼將阻塞所有的意圖,因此所有的意圖都會測試失敗。沒有意圖能夠通過這個過濾器。
<intent-filter><!-- 空的 --></intent-filter>
+ 另一方面,只要過濾器包含至少一個動作,一個沒有指定動作的意圖對象自動通過這個測試

類別測試(Category test)
對於一個能夠通過類別匹配測試的意圖,意圖對象中的類別必須匹配過濾器中的類別。這個過濾器可以列舉另外的類別,但它不能遺漏在這個意圖中的任何類別。
原則上一個沒有類別的意圖對象應該總能夠通過匹配測試,而不管過濾器里有什麼。大部分情況下這個是對的。
但有一個例外,Android把所有傳給startActivity()的隱式意圖當作他們包含至少一個類別:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。
因此自定義 Activity 的時候,不要以為光定義一個 action 就夠了。這樣用 startActivity() 來激活這個 Activity 的時候將一直報錯。
原因就是,他內部要求去匹配 android.intent.category.DEFAULT 這個類別。

因此,想要接收隱式意圖的活動必須在它們的意圖過濾器中包含"android.intent.category.DEFAULT"。
(帶"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"設置的過濾器是例外)

數據測試(Data test)
當一個意圖對象中的URI被用來和一個過濾器中的URI比較時,比較的是URI的各個組成部分。
例如,如果過濾器僅指定了一個scheme,所有該scheme的URIs都能夠和這個過濾器相匹配;
如果過濾器指定了一個scheme、主機名但沒有路經部分,所有具有相同scheme和主機名的URIs都可以和這個過濾器相匹配,而不管它們的路經;
如果過濾器指定了一個scheme、主機名和路經,只有具有相同scheme、主機名和路經的URIs才可以和這個過濾器相匹配。
當然,一個過濾器中的路徑規格可以包含通配符,這樣只需要部分匹配即可。
數據測試同時比較意圖對象和過濾器中指定的URI和數據類型。規則如下:
a. 一個既不包含URI也不包含數據類型的意圖對象僅在過濾器也同樣沒有指定任何URIs和數據類型的情況下才能通過測試。
b. 一個包含URI但沒有數據類型的意圖對象僅在它的URI和一個同樣沒有指定數據類型的過濾器里的URI匹配時才能通過測試。
這通常發生在類似於mailto:和tel:這樣的URIs上:它們並不引用實際數據。
c. 一個包含數據類型但不包含URI的意圖對象僅在這個過濾器列舉了同樣的數據類型而且也沒有指定一個URI的情況下才能通過測試。
d. 一個同時包含URI和數據類型(或者可從URI推斷出數據類型)的意圖對象可以通過測試,如果它的類型和過濾器中列舉的類型相匹配的話。
如果它的URI和這個過濾器中的一個URI相匹配或者它有一個內容content:或者文件file: URI而且這個過濾器沒有指定一個URI,那麼它也能通過測試。
換句話說,一個組件被假定為支持content:和file: 數據如果它的過濾器僅列舉了一個數據類型。

3. intent的作用是什麼隱式intent是怎樣找到合適的目標組件的

android當中顯式intent和隱式intent的區別

定義:

Intent定義:Intent是一種在不同組件之間傳遞的請求消息,是應用程序發出的請求和意圖。作為一個完整的消息傳遞機制,Intent不僅需要發送端,還需要接收端。顯式Intent定義:對於明確指出了目標組件名稱的Intent,我們稱之為顯式Intent。隱式Intent定義:對於沒有明確指出目標組件名稱的Intent,則稱之為隱式Intent。說明:Android系統使用IntentFilter
來尋找與隱式Intent相關的對象。詳細解釋:顯式Intent直接用組件的名稱定義目標組件,這種方式很直接。但是由於開發人員往往並不清楚別的應用程序的組件名稱,因此,顯式Intent更多用於在應用程序內部傳遞消息。比如在某應用程序內,一個Activity啟動一個Service。隱式Intent恰恰相反,它不會用組件名稱定義需要激活的目標組件,它更廣泛地用於在不同應用程序之間傳遞消息。在顯式Intent消息中,決定目標組件的唯一要素就是組件名稱,因此,如果你的Intent中已經明確定義了目標組件的名稱,那麼你就完全不用再定義其他Intent內容。而對於隱式Intent則不同,由於沒有明確的目標組件名稱,所以必須由Android系統幫助應用程序尋找與Intent請求意圖最匹配的組件。Android系統尋找與Intent請求意圖最匹配的組件具體的選擇方法
是:Android將Intent的請求內容和一個叫做IntentFilter的過濾器比較,IntentFilter中包含系統中所有可能的待選組件。如果IntentFilter中某一組件匹配隱式Intent請求的內容,那麼Android就選擇該組件作為該隱式Intent的目標組件。Android如何知道應用程序能夠處理某種類型的Intent請求呢?這需要應用程序在Android-Manifest.xml中聲明自己所含組件的過濾器(即可以匹配哪些Intent請求)。一個沒有聲明Intent-Filter的組件只能響應指明自己名字的顯式Intent請求,而無法響應隱式Intent請求。而一個聲明了IntentFilter的組件既可以響應顯式Intent請求,也可以響應隱式Intent請求。在通過和
IntentFilter比較來解析隱式Intent請求時,Android將以下三個因素作為選擇的參考標准。

Action

Data

Category

而Extra和Flag在解析收到Intent時是並不起作用的。

4. android 通過Intent調用通訊錄,並且顯示多號碼

在調用Android設備的通訊錄時,確實常常會遇到許可權問題。這可能是由於不同手機系統對通訊錄訪問許可權的要求不同。一些手機系統需要強制性授權,而另一些則可能不需要。因此,在進行通訊錄調用前,確保你的應用已經獲得了必要的許可權是至關重要的。

獲取這些許可權的過程可能涉及到在應用的manifest文件中聲明許可權,例如:

<uses-permission android:name="android.permission.READ_CONTACTS"/>

另外,如果應用在運行時請求這些許可權,那麼用戶可能需要在運行時確認授權。這對於確保用戶隱私和應用的合法運行至關重要。

一旦許可權被正確配置並獲得授權,接下來就可以通過Intent進行通訊錄的調用了。使用Intent可以啟動系統的聯系人選擇器,讓用戶從中選擇或搜索聯系人。

例如,可以使用如下代碼啟動聯系人選擇器:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT);

這段代碼首先創建了一個Intent對象,指定要執行的操作為ACTION_PICK(選擇)並指定了數據來源(通訊錄)。然後,通過startActivityForResult方法啟動這個Intent,等待用戶選擇後返回結果。

需要注意的是,在用戶選擇後,應用需要能夠處理返回的結果。這通常涉及到重寫onActivityResult方法,以便從結果中提取用戶選擇的聯系人信息。

總而言之,正確配置和請求必要的許可權是調用Android設備通訊錄的關鍵步驟。通過使用Intent,可以方便地讓用戶選擇或搜索聯系人,從而實現通訊錄功能。

閱讀全文

與android顯示intent相關的資料

熱點內容
雲閃付和農行卡app怎麼授權 瀏覽:121
羈絆命令 瀏覽:49
解壓視頻怪獸大全 瀏覽:962
最新中華人民共和國預演算法 瀏覽:859
電信dns伺服器地址杭州 瀏覽:504
java內存泄露內存溢出 瀏覽:813
筆記本系統映像恢復網路文件夾 瀏覽:932
動態庫能否編譯成靜態 瀏覽:702
少兒編程缺老師 瀏覽:352
德龍咖啡機手機app怎麼下載 瀏覽:561
我的世界國際服hyp伺服器為什麼卡 瀏覽:590
編程object類型中文名 瀏覽:373
轉轉app怎麼用自己的號轉上去 瀏覽:776
java串口開發 瀏覽:766
編程獲取中國股市行業分類並作圖 瀏覽:975
手機變電腦如何編程 瀏覽:410
java許可權管理框架 瀏覽:682
php存儲過程返回值 瀏覽:841
模板匹配演算法介紹 瀏覽:526
編程語言麻煩的代碼 瀏覽:136