通过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);
}
}
@Override
protected 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
...
}
}
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 contacts
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
if(intent.resolverActivity(getPackageManager()) != nulll) {
startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
}
}
@Override
protected 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 number
Uri 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 number
if(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
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);
}
}
@Override
protected 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);
}
@Override
protected 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()读取的文件。