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 ,