1.在App中開啟另一個App
2.了解Intent-Filter的使用
參考:
http://developer.android.com/reference/android/content/Intent.html
http://developer.android.com/guide/topics/intents/intents-filters.html
首先從Intent說起
先看一下官方文檔:
Explicit Intents have specified a component (via
setComponent(ComponentName)
or setClass(Context, Class)
), which provides the exact class to be run. Often these will not include any other information, simply being a way for an application to launch various internal activities it has as the user interacts with the application.
Implicit Intents have not specified a component; instead, they must include enough information for the system to determine which of the available components is best to run for that intent.
可以看到Intent分為兩個種類
一種為 Explicit Intents
另一種為 Implicit Intents
查一下英文字典:
Explicit adj. 明顯的
Implicit adj. 暗示的
從文檔可看出 Explicit Intent 使用方式很明確 就是指定 component 讓系統去調用
而 Implicit Intent就是提供"資訊", 讓系統決定去調用哪個component
本文要講的重點是第二種: Implicit Intent
而要了解Implicit Intent必須先了解 Intent-Filter
Intent-Filter由三個元素組成
1.action
2.category
3.data
而從Filter本身的含意 : 過濾,篩選
可以判斷 Intent-Filter可以指定上列三種元素的屬性
進而讓符合條件的Intent通過, 進而執行該Activity or Service or..
因此可以得知 Implicit Intent 要提供的資訊就是上面這三種
如果寫過打電話的功能, 一定看過以下代碼
Intent _Intent = new Intent();
_Intent.setAction(Intent.ACTION_DIAL);
_Intent.setData(Uri.parse("tel:0123456789"));
startActivity(_Intent);
而其中的 Intent.ACTION_DIAL 中就是Android中撥號的Activity中所指定的Action
那如何使用自己的Action呢?
以下為代碼
<activity
android:name=".intent.IntentDemoActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="maca.demo.GOTO_INTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
指定action為"maca.demo.GOTO_INTEN"
而如何調用就和之前一樣
Intent
_Intent = new Intent();
_Intent.setAction("maca.demo.GOTO_INTENT");
startActivity(_Intent);
而category和data也就是同樣的原理 這裡僅附上代碼
xml:
<intent-filter>
<action android:name="maca.demo.GOTO_INTENT" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="maca.demo.category.INTENT" />
<data android:scheme="hello" android:mimeType="text/plain"></data>
</intent-filter>
java:
Intent _Intent = new Intent();
_Intent.setAction("maca.demo.GOTO_INTENT");
_Intent.addCategory("maca.demo.category.INTENT");
_Intent.setDataAndType(Uri.parse("hello://nihowma"), "text/plain");
startActivity(_Intent);
沒有留言:
張貼留言