當前位置:首頁 » 安卓系統 » android隱式intent

android隱式intent

發布時間: 2022-09-24 12:22:34

⑴ 如何使用ContentProvider類實現隱式Intent

舉例說明:
1、定義對應的ContentProvider類TestProvider,繼承ContentProvider。
類裡面需要實現一系列的abstract方法,如:OnCreate,getType,insert…

2、在應用程序的AndroidManifest.xml中加入<provider>標簽,例如:
<provider android:name="TestProvider"
android:authorities="com.android.test.settings"/>

android:name是指對應ContentProvider的類名,也就是所建的TestProvider類
android:authorities是標識部分,為了保證唯一性,這里使用完整的包名和類名

3、在想要調用的activity所對應應用的AndroidManifest.xml中,把該activity的intent-filter添加上對Data的要求

4、在StartActivity(intent)之前,設定該intent對應的action(調用setAction()指定)和data(調用setData(Uri.parse(content:// com.android.test.settings /test)))。StartActivity之後,Android系統內部就會根據上面Uri裡面的com.android.test.settings,去找到對應的TestProvider(根據android:authorities),然後再調用getType方法。這樣Android系統會根據getType返回的數據類型,以及intent在setAction時制定的action,去啟動對應的Activity

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

區別如下:

  1. 顯式啟動Activity指的是在Intent內部直接聲明要啟動的activity所對應的class。

  2. 隱式啟動Activity的intent到底發給哪個activity,需要進行三個匹配,一個是action, 一個是category,一個是data,可以是全部或部分匹配,同樣適用於Service和BroadcastReceiver。

A:顯式啟動
下面用代碼來解釋什麼是顯式啟動。
Intent intent=new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
B:隱式啟動
隱式啟動不同之處在於並不需要像Intent(MainActivity.this, SecondActivity.class)這樣傳參數然後再Start另一個Activity.需要在intent添加過濾器intentfilter。
<activity
android:name="com.example.android.tst.SecondActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="com.example.android.tst.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
這樣,需要在啟動另一個Activity的時候只需要如下方法就可以:
Intent intent=new Intent("com.example.android.tst.SecondActivity");
startActivity(intent);

⑶ Android如何使用隱式Intent啟動另一個Activity

  1. 找到另一個Activity 的action

```java

Intent intent = new Intent("action");

context.startActivity(intent);

```

⑷ 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: 數據如果它的過濾器僅列舉了一個數據類型。

⑸ 在android中,顯示intent和隱示intent有什麼區別

可以這樣理解:
顯示Intent是指定一個Activity來啟動,比如你經理吩咐你去給他買杯奶茶;
而隱式Intent並不指定某一個Activity,而是指定一個特徵,比如你經理說「那個長得帥的給我去買杯奶茶」,雖然沒有指定你去執行,但是你覺得自己很帥,你也去響應了。另外,隱式Intent的話有可能有多個Activity去響應,這時候就需要用戶去操作選擇具體執行的Activity,比如說這時候你一個同事跑出來說「我長的也很帥 我去買」,這時候就有兩個人響應你經理號召了,然後你經理就從你們兩個人中選出他覺得比較帥的去買奶茶了,就是這樣

⑹ android 調用qq視頻

Android程序調用QQ的介面方法。
在Android程序中我們可以通過發送隱式Intent來啟動系統默認的瀏覽器。如果手機本身安裝了多個瀏覽器而又沒有設置默認瀏覽器的話,系統將讓用戶選擇使用哪個瀏覽器來打開連接。
Android仿QQ用戶帳號登錄界面效果,附上完整的源代碼,本實例中的實現方法比較簡單,主要是調用一張圖片來實現登錄界面,另外還添加了一些按鈕的美化效果,雖然很簡單的例子,但對於android手機界面編程打基礎,是挺有用的參考範例。

⑺ 顯示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時是並不起作用的。

⑻ Android顯示Intent和隱示Intent之間的區別

在Activity的跳轉中
>Activity的跳轉需要創建Intent對象,通過設置intent對象的參數指定要跳轉Activity
>通過設置Activity的包名和類名實現跳轉,稱為顯式意圖
>通過指定動作實現跳轉,稱為隱式意圖
###顯式意圖
* 跳轉至同一項目下的另一個Activity,直接指定該Activity的位元組碼即可
Intent intent = new Intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent);
* 跳轉至其他應用中的Activity,需要指定該應用的包名和該Activity的類名
Intent intent = new Intent();
//啟動系統自帶的撥號器應用
intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");
startActivity(intent);
###隱式意圖
* 隱式意圖跳轉至指定Activity
Intent intent = new Intent();
//啟動系統自帶的撥號器應用
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);
* 要讓一個Activity可以被隱式啟動,需要在清單文件的activity節點中設置intent-filter子節點
<intent-filter >
<action android:name="com.itheima.second"/>
<data android:scheme="asd" android:mimeType="aa/bb"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
* action 指定動作(可以自定義,可以使用系統自帶的)
* data 指定數據(操作什麼內容)
* category 類別 (默認類別,機頂盒,車載電腦)
* 隱式意圖啟動Activity,需要為intent設置以上三個屬性,且值必須與該Activity在清單文件中對三個屬性的定義匹配
* intent-filter節點及其子節點都可以同時定義多個,隱式啟動時只需與任意一個匹配即可
#####獲取通過setData傳遞的數據
//獲取啟動此Activity的intent對象
Intent intent = getIntent();
Uri uri = intent.getData();
###顯式意圖和隱式意圖的應用場景
* 顯式意圖用於啟動同一應用中的Activity
* 隱式意圖用於啟動不同應用中的Activity
* 如果系統中存在多個Activity的intent-filter同時與你的intent匹配,那麼系統會顯示一個對話框,列出所有匹配的Activity,由用戶選擇啟動哪一個

⑼ Android跳轉頁面用Intent隱式好還是顯示好

各有各的好處……顯式的可以從1個Activity跳到另外一個明確的Activity。隱式的就不確定跳到哪個Activity了,但是要對跳轉進行描述,描述的內容就是目標Activity的特點,那麼系統會自動匹配你需要的目標Activity了。
例如Intent intent = new Intent(Intent.ACTION_CALL); 就是為intent 綁定了ACTION_CALL的動作,就是打電話。

熱點內容
文件des加密 發布:2024-04-24 19:24:20 瀏覽:704
魔獸世界data文件夾 發布:2024-04-24 19:24:13 瀏覽:213
蘋果手機怎麼清空緩存 發布:2024-04-24 19:23:38 瀏覽:892
微信密碼沒有手機號如何找回 發布:2024-04-24 19:18:20 瀏覽:874
微雲解析源碼 發布:2024-04-24 19:13:58 瀏覽:791
紙張記錄存儲 發布:2024-04-24 19:00:35 瀏覽:800
存儲結構中定義一個集合 發布:2024-04-24 18:52:05 瀏覽:427
搜狗網址存儲的密碼在哪裡查看 發布:2024-04-24 18:52:03 瀏覽:917
抖音搶福袋腳本最新 發布:2024-04-24 18:52:00 瀏覽:701
畫機械3D圖電腦要什麼配置 發布:2024-04-24 18:50:24 瀏覽:393