Common Intents

来源:互联网 发布:java实现登陆注册 编辑:程序博客网 时间:2024/06/05 17:37

通过intent来启动另外一个app,可以通过设定这个intent对象来配置要执行的动作(比如查看地图或者拍照),这种类型的intent为隐式的intent,因为它没有指定那个app组件,而是通过设定intent中的action, data属性。

当你将一个隐式intent传给startActivity()或者startActivityForResult()时,系统会解析这个intent,并调用合适的app组件来执行。如果有多个符合条件的组件,那么将会提供一个界面供用户选择。

这里描述了一个常见的隐式的intent,每个部分还提供了怎么创建一个intent filter来展示你组件的能力。

注意:当没有app组件符合你的隐式intent时,你的app将会崩溃。为了安全起见,应该对你的intent先调用resolveActivity(),如果返回结果非空,那么说明有符合的app组件可以启动,如果结果为空,说明没有符合的app组件,必须舍弃这个intent。

如果你对怎么创建intent和intent-filter,请参照intents and intent filters


Camera

Capture a picture or video and return it (获得图片或者视频并返回)

为了打开camera这个app并得到想要的图片或者视频,可以使用ACTION_IMAGE_CAPTURE 或者 ACTION_VIDEO_CAPTURE这个action属性。而且在EXTRA_OUTPUT的URI来保存图片和视频。

Action

ACTION_IMAGE_CAPTURE

ACTION_VIDEO_CAPTURE

Data URI Scheme

None

MIME TYPE

None

Extras

Extra_OUTPUT (指定用来保存图片或者视频的URI位置)

当camera 成功返回到你的activity(即你的app响应了onActivityResult()函数),你可以使用放在你指定URI的图片和视频。

注意:当你使用ACTION_IMAGE_CAPTURE来获取图片时,camera可能会同时返回一个Bitmap的复制图片保存在返回的Intent的data中。

Example intent:

static final int REQUEST_IMAGE_CAPTURE = 1;static final Uri mLocationForPhotos;public void caputrePhoto(String targetFilename) {Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(mLocationForPhotos, targetFilename));if(intent.resolveActivity(getPackageManager()) != null) {startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);}}protected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {Bitmap thumbnail = data.getParcelableExtra("data");}}


关于怎么通过intent来获得图片和怎么创建合适的Uri来保存图片的更多信息请参照Taking Photos Simply or Taking Video Simply.

intent filter例子:

<activity ...><intent-filter><action android:name="android.media.action.IMAGE_CAPTURE" /><category android:name="android.intent.category.DEFAULT" /><intent-filter></activity>

当处理上面的intent时,activity会检查extra中的EXTRA_OUTPUT,将得到的图片或者视频保存在extra中指定的地址中,然后调用setResult()函数将压缩的缩略图封装在返回的intent的extra的”data"中。

Contacts/People App

Select a Contact (选择一个联系方式)

如何让用户选择一个联系方式和让你的app访问所有的联系人信息,可以通过设置intent的action为ACTION_PICK, 指定MIME type为Contacts.CONTENT_TYPE。

返回给函数onActivityResult()的Intent中包含指定的联系人的content:URI。这个返回结果可以让你的app通过Conttacts Provider短暂获得访问联系人,即便你的app不具备READ_CONTACTS的权限。

建议:如果你仅仅想获得一部分联系人信息,比如电话号码或者email,可以参照接下来的怎么选取指定的联系人数据。

Action

ACTION_PICK

Data URI Scheme

None

MIME Type

Contacts.CONTENT_TYPE


例子:

static final int REQUEST_SELECT_CONTACT = 1;public void selectContact() {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType(ContactsContract.Contacts.CONTENT_TYPE);if(intent.resolveActivity(getPackageManager()) != null) {startActivityForResult(intent, REQUEST_SELECT_CONTACT);}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {Uri contactUri = data.getData();//Do something with the selected contact at contactUri...}}


关于在有了contact URI后如何获得contact的详细信息请参照Retrieving Details for a Contact。记住当你使用上面例子的intent获得contact URI,你可以不需要申请READ_CONTACTS权限来获取contact的详细信息。


Select specific contact data (选择特定的联系人数据)

如果你仅仅想获得联系人信息的一部分,比如电话号码或者email,你可以通过配置intent的action为ACTION_PICK, MIME type为下面的几种,比如CommonDataKinds.Phone.CONTENT_TYPE来获取联系人的电话号码。

如果你单单想获得联系人的一种数据(比如仅仅电话号码),那么使用ContactsContract.CommonDataKinds类的CONTENT_TYPE是比使用Contacts.CONTENT_TYPE更高效的,因为你可以不通过查询Contacts Provider而直接访问想要的数据。

返回给函数onActivityResult()的Intent中包含指定的联系人的content:URI。这个返回结果可以让你的app通过Conttacts Provider短暂获得访问联系人,即便你的app不具备READ_CONTACTS的权限。

Action

ACTION_PICK

Data URI Scheme

None

MIME Type

CommonDataKinds.Phone.CONTENT_TYPE (获得电话号码)

CommonDataKinds.Email.CONTENT_TYPE (获得email)

CommonDataKinds.StructuredPostal.CONTENT_TYPE (获取邮寄地址)

其它包括在ContactsContract的CONTENT_TYPE

例子:

static final int REQUEST_SELECT_PHONE_NUMBER = 1;public void selectContact() {//start an activity for the user to pick a phone number from contactsIntent intent = new Intent(Intent.ACTION_PICK);intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);if(intent.resolverActivity(getPackageManager()) != nulll) {startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if(requestCod == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {//get the URI and query the content provider for the phone numberUri contactUri = data.getData();String[] projection = new String[] {CommonDataKinds.Phone.NUMBER);Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null);//if the cursor returned is valid, get the phone numberif(cursor != null && cursor.moveToFirst()) {int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);String number = cursor.getString(numberIndex);//Do something with the phone numbe...}}}


View a contact (查看联系人)

通过指定action为ACTION_VIEW和data为content:URI的intent来查看联系人。

有两种方法来初始化contact URI::

使用ACTION_PICK返回的URI,不需要任何app权限。

直接访问所有的联系人信息,需要READ_CONTACTS权限

Action

ACTION_VIEW

Data URI Scheme

content:<URI>

MIME Type

None, 类型从contact URI继承

例子:

public void viewContact(Uri contactUri) {    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}


Edit an existing contact (编辑存在的联系人信息)

通过指定action为ACTION_EDIT,data为content:URI,和其他定义在ContactsContract.Intents.Insert的常量的intent来编辑一个联系人信息。

有两种方法来初始化contact URI::

使用ACTION_PICK返回的URI,不需要任何app权限。

直接访问所有的联系人信息,需要READ_CONTACTS权限

Action

ACTION_EDIT

Data URI Scheme

content:<URI>

MIME Type

None, 类型从contact URI继承

Extras(可选)

定义在ContactsContract.Intents.Insert的常量

例子:

public void editContact(Uri contactUri, String email) {    Intent intent = new Intent(Intent.ACTION_EDIT);    intent.setDataAndType(contactUri, Contacts.CONTENT_TYPE);    intent.putExtra(Intents.Insert.EMAIL, email);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

更多信息请参照Modifying Contacts Using Intents。

Insert a contact (添加联系人)

通过指定action为ACTION_INSERT,MIME类型为Contacts.CONTENT_TYPE,和其他定义在ContactsContract.Intents.Insert的常量的intent来编辑一个联系人信息。

Action

ACTION_INSERT

Data URI Scheme

NONE

MIME Type

Contacts.CONTENT_TYPE

Extras(可选)

定义在ContactsContract.Intents.Insert的常量

例子:

public void insertContact(String name, String email) {    Intent intent = new Intent(Intent.ACTION_INSERT);    intent.setType(Contacts.CONTENT_TYPE);    intent.putExtra(Intents.Insert.NAME, name);    intent.putExtra(Intents.Insert.EMAIL, email);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

更多关于添加联系方式请参照Modifying Contacts Using Intents

 

Email

Compose an email with optional attachments (编写有附件的email)

根据有无附件选择下面对应的action,通过extra keys来包含email的更多详细信息,比如收件人,标题等。

Action

ACTION_SENDTO (用于没有附件)

ACTION_SEND (只有一个附件)

ACTION_SEND_MULTIPLE (多个附件)

Data URI Scheme

NONE

MIME Type

PLAIN_TEXT_TYPE("text/plain")

"*/*"

Extras(可选)

Intent.EXTRA_EMAIL

包含所有收件人的email地址的字符串数组

Intent.EXTRA_CC

包含抄送收件人的email地址的字符串数组

Intent.EXTRA_BCC

包含BCC收件人的email地址的字符串数组

Intent.EXTRA_SUBJECT

邮件标题的字符串

Intent.EXTRA_TEXT

邮件内容的字符串

Intent.EXTRA_STREAM

指向附件的Uri。如果含有多个附件,这是一个包含多个Uri对象的ArrayList。

例子:

public void composeEmail(String[] addresses, String subject, Uri attachment) {    Intent intent = new Intent(Intent.ACTION_SEND);    intent.setType("*/*");    intent.putExtra(Intent.EXTRA_EMAIL, addresses);    intent.putExtra(Intent.EXTRA_SUBJECT, subject);    intent.putExtra(Intent.EXTRA_STREAM, attachment);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

如果你想确保你的intent是有一个email app接收(而不是其他短信或者社交app),那么使用包含“mailto:"数据scheme的ACTION_SENDTO:

public void composeEmail(String[] addresses, String subject) {    Intent intent = new Intent(Intent.ACTION_SENDTO);    intent.setData(Uri.parse("mailto:")); // only email apps should handle this    intent.putExtra(Intent.EXTRA_EMAIL, addresses);    intent.putExtra(Intent.EXTRA_SUBJECT, subject);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.SEND" />        <data android:type="*/*" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter>    <intent-filter>        <action android:name="android.intent.action.SENDTO" />        <data android:scheme="mailto" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

File Storage (文件存储)

Retrieve a specific type of file (获取特定类型的文件)

通过指定action为ACTION_GET_CONTENT以及指定的MIME的类型的intent让用户选择一个文件并返回这个文件的引用给app。返回的文件引用和现在的activity有同学的生命周期,为了能以后范文这个引用,你必须引进一个备份。这个intent还允许用户在进程中创建新的文件(例如,用户可以通过照相机照相而不是选择当前的文件)

在onActivityResult()返回的intent包含指向这个文件的URI。这个URI可以是http:, file: 或者content:等。如果你想让返回的文件只能被来说content provider访问,并且能被openFileDescriptor()打开,那么你必须在Intent的category中添加CATEGORY_OPENABLE属性。

在android4.3及更高的版本中,你可以通过在intent添加EXTRA_ALL_MULTIPLE支持用户选择多个文件,通过设置这个为true,你可以通过getClipData()返回的ClipData对象来访问选择的文件。

Action

ACTION_GET_CONTENT

Data URI Scheme

NONE

MIME Type

根据你想选择的文件而定

Extras(可选)

EXTRA_ALLOW_MULTIPLE

决定用户是否可以同时选择多个文件,为true时表明可以同时选。

EXTRA_LOCAL_ONLY

决定返回的文件是否必须是设备本地有的,而不是通过远程服务下载。

Category(可选)

CATEGORY_OPENABLE

只返回能被openFileDescritptor()读取的文件。

例子:

static final int REQUEST_IMAGE_GET = 1;public void selectImage() {    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);    intent.setType("image/*");    if (intent.resolveActivity(getPackageManager()) != null) {        startActivityForResult(intent, REQUEST_IMAGE_GET);    }}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {        Bitmap thumbnail = data.getParcelable("data");        Uri fullPhotoUri = data.getData();        // Do work with photo saved at fullPhotoUri        ...    }}
intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.GET_CONTENT" />        <data android:type="image/*" />        <category android:name="android.intent.category.DEFAULT" />        <!-- The OPENABLE category declares that the returned file is accessible             from a content provider that supports OpenableColumns             and ContentResolver.openFileDescriptor() -->        <category android:name="android.intent.category.OPENABLE" />    </intent-filter></activity>

Open a specific type of file (打开指定类型的文件)

上面的例子只能获取文件的一个复件,但在android 4.4更高的版本中,可以通过指定action为ACTION_OPEN_DOCUMENT和特定的MIME 类型的intent允许用户通过其他app打开一个文件。通过指定action为ACTION_CREATE_DOCUMENT可以读写一个文件。例如,可以通过action为ACTION_CREATE_DOCUMENT的intent让其他的app返回一个能创建文档的URI,用户就可以在这个URI中写入新的文档。

通过action为ACTION_GET_CONTENT返回给onActivityResult()的URI可以是任何类型,但是通过action为ACTION_OPEN_DOCUMENT 和ACTION_CREATE_DOCUMENT返回的URI都是content: URI。你可以通过openFileDescriptor()打开这个文件,并通过DocumentsContract.Document中定义的列来查找。

返回的URI保证你的app可以长久的访问该文件,所以当你想要读一个存在的文件或者当你想要打开一个文件编辑是,使用ACTION_OPEN_DOCUMENT,这样你就不用再你的app里面备份这个文件。

可以通过添加EXTRA_ALLOW_MULTIPLE这个category来允许用户选择多个文件。如果用户选择一个文件,你可以通过getData()函数获得对应的文件。如果用户选择多个文件,那么getData(0返回一个null,你只能通过getClipData()返回的ClipData对象来获得文件。

注意:你的intent必须指定一个MIME类型和声明CATEGORY_OPENABLE,你可以通过在extra中的EXTRA_MIME_TYPE 中赋值一个MIME类型的数组以指定多个数据类型,这种情况下你必须设置MIME类型为“*/*"。

Action

ACTION_OPEN_DOCUMENT 

ACTION_CREATE_DOCUMENT

Data URI Scheme

NONE

MIME Type

根据指定的数据类型而定

Extras(可选)

EXTRA_ALLOW_MULTIPLE

决定用户是否可以同时选择多个文件,为true时表明可以同时选。

EXTRA_LOCAL_ONLY

决定返回的文件是否必须是设备本地有的,而不是通过远程服务下载。

EXTRA_MIME_TYPES

包含多个MIME类型的数组,通过setType()函数将MIME type设置为”*/*"

EXTRA_TITLE

用于ACTION_CREATE_DOCUMENT指定一个初始的文件名

Category(可选)

CATEGORY_OPENABLE

只返回能被openFileDescritptor()读取的文件。

例子:

static final int REQUEST_IMAGE_OPEN = 1;public void selectImage() {    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);    intent.setType("image/*");    intent.addCategory(Intent.CATEGORY_OPENABLE);    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.    startActivityForResult(intent, REQUEST_IMAGE_OPEN);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) {        Uri fullPhotoUri = data.getData();        // Do work with full size photo saved at fullPhotoUri        ...    }}

第三方的app不能响应action为ACTION_OPEN_DOCUMENT的intent,系统接收这个intent并在一个UI中显示其他app中所有合适的文件。

为了在上面的UI中提供你的app 文件并允许其他app打开它们,你必须实现DocumentsProvider,并在创建包含PROVIDER_INTERFACE的intent filter:

<provider ...    android:grantUriPermissions="true"    android:exported="true"    android:permission="android.permission.MANAGE_DOCUMENTS">    <intent-filter>        <action android:name="android.content.action.DOCUMENTS_PROVIDER" />    </intent-filter></provider>

更多关于如何管理你的app文件以便 其他app可以访问这些文件请参照Storage Access Framework。


Maps 

Show a location on a map (在地图上显示一个位置)

使用action为ACTION_VIEW,在data指定位置信息的intent来打开地图。

Action

ACTION_VIEW

Data URI Scheme

geo:latitude, longitude

在地图上显示指定的坐标,例如:"geo:47.6, -123.3"

geo:latitude, longitude?z=zoom

在地图上显示以指定坐标为中心的区域,区域大小从1到23, z=1显示整个地球。例如:"geo:47.6, -123.3?z=11"

geo:0,0?q=lat,lng(label)

在地图上显示指定的坐标,并标注,例如:"geo:0,0?q=34.99, -106.61(Treasure)"

geo:0,0?q=my+street+address

在地图上显示my street address,例如:”geo:0,0?q=1600+amphitheatre+parkway+ca"

MIME Type

None

例子:
public void showMap(Uri geoLocation) {    Intent intent = new Intent(Intent.ACTION_VIEW);    intent.setData(geoLocation);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.VIEW" />        <data android:scheme="geo" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

Music or Video (音乐视频)

Play a media file (播放多媒体文件)

通过指定action为ACTION_VIEW,指定文件的URI位置的intent来播放多媒体文件。


Action

ACTION_VIEW

Data URI Scheme

file:<URI>

content:<URI>

http:<URI>

MIME Type

"audio/*"

"application/ogg"

"application/x-ogg"

"application/itunes"

或其它你app需要的。

例子:

public void playMedia(Uri file) {    Intent intent = new Intent(Intent.ACTION_VIEW);    intent.setData(file);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.VIEW" />        <data android:type="audio/*" />        <data android:type="application/ogg" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

Phone 

Initiate a phone call (打电话)

指定action为ACTION_DIAL和通过URI scheme指定电话号码来打开电话app并拨打号码。当phone app出现后,它会显示电话号码,但是还需用户按下拨打的键才能打电话。

Action

ACTION_DIAL

Data URI Scheme

tel:<phone-number>

MIME Type

None

在IETF RFC 3966定义了合法的电话号码格式,例如

tel:2125551212

tel:(212) 555 1212

可以通过Uri.parse()来转换号码格式,如果不确定号码格式,可以使用Uri.fromParts()函数。

例子:


public void dialPhoneNumber(String phoneNumber) {    Intent intent = new Intent(Intent.ACTION_DIAL);    intent.setData(Uri.parse("tel:" + phoneNumber));    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

Settings(设置)

Open a specific section of Settings (打开一个特定的设置)

当需要打开系统设置让用户修改设定是,可以使用下面的acitons来打开想要的设定面板:

Action:

Action

ACTION_SETTINGS

ACTION_WIRELESS_SETTINGS

ACTION_AIRPLANE_MODE_SETTINGS

ACTION_WIFI_SETTINGS

ACTION_APN_SETTINGS

ACTION_BLUETOOTH_SETTINGS

ACTION_DATE_SETTINGS

ACTION_LOCALE_SETTINGS

ACTION_INPUT_METHOD_SETTINGS

ACTION_DISPLAY_SETTINGS

ACTION_SECURITY_SETTINGS

ACTION_LOCATION_SOURCE_SETTINGS

ACTION_INTERNAL_STORAGE_SETTINGS

ACTION_MEMORY_CARD_SETTINGS

更多关系setting可查看setting文档。

Data URI Scheme

None

MIME Type

None

例子:

public void openWifiSettings() {    Intent intent = new Intent(Intent.ACTION_WIFI_SETTINGS);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

Text Messaging (短信)

Compose an SMS/MMS message with attachmemt  (编写含有附件的短信或者彩信)

使用下面的action,并在extra key中指定电话号码,标题,和消息本身。

Action

ACTION_SENDTO

ACTION_SEND

ACTION_SEND_MULTIPLE

Data URI Scheme

sms:<phone_number>

smsto:<phone_number>

mms:<phone_number>

mmsto:<phone_number>

MIME Type

PLAIN_TEXT_TYPE ("text/plain")

"image/*"

"video/*"

Extras(可选)

“subject"

标题对应的字符串

”sms_body"

短信对应的字符串

EXTRA_STREAM

指向附加的图片或者视频的Uri。如果action是ACTION_SEND_MULTIPLE,那么这个的值是一个Uri的ArrayList.

例子:

public void composeMmsMessage(String message, Uri attachment) {    Intent intent = new Intent(Intent.ACTION_SEND);    intent.setType(HTTP.PLAIN_TEXT_TYPE);    intent.putExtra("sms_body", message);    intent.putExtra(Intent.EXTRA_STREAM, attachment);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

如果只想让你的intent是由文本消息的app接收(而不是email或者社交app),那么使用ACTION_SENDTO的action,并指定data scheme为“smsto:"

public void composeMmsMessage(String message, Uri attachment) {    Intent intent = new Intent(Intent.ACTION_SEND);    intent.setData(Uri.parse("smsto:"));  // This ensures only SMS apps respond    intent.putExtra("sms_body", message);    intent.putExtra(Intent.EXTRA_STREAM, attachment);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}

intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.SEND" />        <data android:type="text/plain" />        <data android:type="image/*" />        <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>

注意:如果你想编写SMS/MMS的消息app,在android 4.4.及更高的版本中,你必须在intent filters中实现额外的action以确保你的app是系统默认的sms app。

Web Browser (网页浏览器)

Load a web URL (加载一个URL)

使用action为ACTION_VIEW的intent来打开一个网页

Aciton

ACTION_VIEW

Data URI Scheme

http:<URL>

https:<URL>

MIME Type

PLAIN_TEXT_TYPE (”text/plain“)

"text/html"

"application/xhtml+xml"

"application/vnd.wap.xhtml+xml"

例子:

public void openWebPage(String url) {    Uri webpage = Uri.parse(url);    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }}
intent filter例子:

<activity ...>    <intent-filter>        <action android:name="android.intent.action.VIEW" />        <!-- Include the host attribute if you want your app to respond             only to URLs with your app's domain. -->        <data android:scheme="http" android:host="www.example.com" />        <category android:name="android.intent.category.DEFAULT" />        <!-- The BROWSABLE category is required to get links from web pages. -->        <category android:name="android.intent.category.BROWSABLE" />    </intent-filter></activity>
建议:当你的android app提供类似于你网页的功能时,即在intent filter包含指向你网页的URLs。那么当用户装上你的app后,当连接到你的网页是,系统会打开你的app而不是你的网页。

Perform a web search (网页查找)

通过指定action为ACTION_WEB_SEARCH,在extra 中的SearchManager.QUERY中指定查找的字符串的intent来进行网页查找。

Action

ACTION_WEB_SEARCH

Data URI Scheme

None

MIME Type

None

Extras

SearchManager.QUERY

例子:

public void searchWeb(String query) {    Intent intent = new Intent(Intent.ACTION_SEARCH);    intent.putExtra(SearchManager.QUERY, query);    if (intent.resolveActivity(getPackageManager()) != null) {        startActivity(intent);    }








Action

ACTION_OPEN_DOCUMENT 

ACTION_CREATE_DOCUMENT

Data URI Scheme

NONE

MIME Type

根据指定的数据类型而定

Extras(可选)

EXTRA_ALLOW_MULTIPLE

决定用户是否可以同时选择多个文件,为true时表明可以同时选。

EXTRA_LOCAL_ONLY

决定返回的文件是否必须是设备本地有的,而不是通过远程服务下载。

EXTRA_MIME_TYPES

包含多个MIME类型的数组,通过setType()函数将MIME type设置为”*/*"

EXTRA_TITLE

用于ACTION_CREATE_DOCUMENT指定一个初始的文件名

Category(可选)

CATEGORY_OPENABLE

只返回能被openFileDescritptor()读取的文件。

0 0
原创粉丝点击