当前位置:操作系统 > 安卓/Android >>

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>
       

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,