Android Intent action有什麼用???

實例一:

有三個Activity:MainActivity.java/BAcitvity.java/CActivity.java

假設這是一個照相應用MainActivity是程序入口,BActivity和CActivity都可以處理照相的內容。

在我們不會使用action的時候我們要使這個應用既可以使用BActivity照相,又能使用CActivity照相如何實現?

當然是在MainActivity中寫兩個Button,

new Intent(MainActivity.this,BActivity.class);

new Intent(MainActivity.this,CActivity.class);

通過兩種不同的Intent來發起請求。

 

那麼如何使用action來實現呢?

在xml中先這樣定義:

[html]

<activity 
    android:name=".MainActivity" 
    android:label="@string/title_activity_main" > 
    <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
 
        <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
 
<activity 
    android:name=".BActivity" 
    android:label="@string/title_activity_main" 
    android:launchMode="singleTask" > 
    <intent-filter> 
        <action android:name="com.h3c.intent.ACTION_VIEW"></action>   
        <category android:name="android.intent.category.DEFAULT"></category>  
    </intent-filter> 
</activity> 
 
<activity 
    android:name=".CActivity" 
    android:label="@string/title_activity_main" > 
    <intent-filter> 
        <action android:name="com.h3c.intent.ACTION_VIEW"></action>   
        <category android:name="android.intent.category.DEFAULT"></category>  
    </intent-filter> 
</activity> 
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity
            android:name=".BActivity"
            android:label="@string/title_activity_main"
            android:launchMode="singleTask" >
            <intent-filter>
                <action android:name="com.h3c.intent.ACTION_VIEW"></action> 
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
       
        <activity
            android:name=".CActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="com.h3c.intent.ACTION_VIEW"></action> 
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
我們在MainActivity中實現一個Button,點擊發送:

new Intent("com.h3c.intent.ACTION_VIEW");

此時就會彈出一個Dialog讓我們自動選擇是使用BActivity還是使用CActiviy瞭,就如前文我提到camer360的那個例子

這也就是隱式intent,即發送一種類型的action,可以讓所有支持該類型的activity都收到消息,然後由用戶選擇使用哪個activity處理。

 

實例二:(Android分享與接收分享)

自己之前其實也接觸過action,但是沒有自己的去想清楚。比如在做DLNA這個項目的時候需要支持第三方媒體app分享給DLNA,如何實現呢?

首先看看如何分享給別人:

[java]
public static void shareText(Context context, String title, String text) { 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("text/plain"); 
    intent.putExtra(Intent.EXTRA_SUBJECT, title); 
    intent.putExtra(Intent.EXTRA_TEXT, text); 
    context.startActivity(Intent.createChooser(intent, title)); 

public static void shareText(Context context, String title, String text) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, title);
    intent.putExtra(Intent.EXTRA_TEXT, text);
    context.startActivity(Intent.createChooser(intent, title));
}就是用上文提到的隱式intent,因為我並不知道有那些應用可以支持分享,所以我用隱式intent發起分享這一類的請求。

 

我們再看如何支持分享:

[html]
<activity android:name=".SharePage" android:label="分享到微博"> 
    <intent-filter> 
        <action android:name="android.intent.action.SEND" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
        <data android:mimeType="image/*" /> 
    </intent-filter> 
</activity> 
<activity android:name=".SharePage" android:label="分享到微博">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>是的,使用action告訴別人我支持SEND這類隱式intent,註意必須也有這樣一句話,否則運行會報錯。[html] view plaincopyprint?<category android:name="android.intent.category.DEFAULT" /> 
<category android:name="android.intent.category.DEFAULT" />最後通過data約束一下格式。

 

大傢應該跟我一樣終於明白action的用法瞭吧!

 作者:h3c4lenovo
 
 

 

發佈留言