實作Android裡利用Intent呼叫其他程式
這次的案子想要實作從A程式呼叫B程式的其中一個class。
以下介紹如何使用Intent來進行呼叫。
Intent分兩種,一種叫做明示(Explicit) ,另一種叫暗默(Implicit),不知道台灣的要怎麼稱呼所以我就暫且用日文的稱呼法。
假設目前在A程式下要打開B程式的 C-class
明示Intent要使用的前提必須要知道B程式的PackageName,而且也要知道C-class的名稱,才可以指定開啟。
(PackageName取用方法請服用)
暗默Intent則是不需要知道任何東西,只要講class名就好,Android會自動幫你找合適的開啟程式。
很複雜?
這樣想好了:
假設今天一個班裡面不會出現同名同姓的兩個人。
我今天要找一年二班的王小明,我可以直接跑去廣播說「我找一年二班王小明」
這樣子規定了班級(PackageName)跟名字(Class)的情況下,就可以直接找得到我要的人。
這就叫明示。
我今天廣播「我要找王小明」。
這個時候整個學校(Android系統)裡面的所有叫做王小明(Class)的人都會出列,然後直接讓我選擇要找哪一個王小明。
這就叫暗默。
很粗略的解釋,不過大概是這樣的概念,有錯誤還請指正。
明示Intent用法很直接,只要在A程式下面下這一行就可以了
使用暗默Intent的前提下,B程式必須先在AndroidManifest.xml下面多加上Intent-filter,並且設為default才能給其他程式取用
然後在A程式下面下這個指令就可以了:
以下介紹如何使用Intent來進行呼叫。
Intent分兩種,一種叫做明示(Explicit) ,另一種叫暗默(Implicit),不知道台灣的要怎麼稱呼所以我就暫且用日文的稱呼法。
假設目前在A程式下要打開B程式的 C-class
明示Intent要使用的前提必須要知道B程式的PackageName,而且也要知道C-class的名稱,才可以指定開啟。
(PackageName取用方法請服用)
暗默Intent則是不需要知道任何東西,只要講class名就好,Android會自動幫你找合適的開啟程式。
很複雜?
這樣想好了:
假設今天一個班裡面不會出現同名同姓的兩個人。
我今天要找一年二班的王小明,我可以直接跑去廣播說「我找一年二班王小明」
這樣子規定了班級(PackageName)跟名字(Class)的情況下,就可以直接找得到我要的人。
這就叫明示。
我今天廣播「我要找王小明」。
這個時候整個學校(Android系統)裡面的所有叫做王小明(Class)的人都會出列,然後直接讓我選擇要找哪一個王小明。
這就叫暗默。
很粗略的解釋,不過大概是這樣的概念,有錯誤還請指正。
明示Intent用法很直接,只要在A程式下面下這一行就可以了
Intent intent = new Intent(); intent.setComponent(new ComponentName("com.example.testApp","com.example.testApp.MainActivity" )); startActivity(intent);
使用暗默Intent的前提下,B程式必須先在AndroidManifest.xml下面多加上Intent-filter,並且設為default才能給其他程式取用
<manifest package="com.example.testApp" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundicon="@mipmap/ic_launcher_round" android:supportsrtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> <!-- 加上這行 --> <intent-filter> <action android:name="com.example.testApp"> <category android:name="android.intent.category.DEFAULT"> </category></action></intent-filter> <!-- 加上這行 --> </activity> </application> </manifest>
然後在A程式下面下這個指令就可以了:
Intent intent = new Intent(); intent.setAction("com.example.testApp"); startActivity(intent);
留言
張貼留言