(1)鬧鐘
-
創建鬧鐘(ACTION_SET_ALARM)
示例Intent:
public void createAlarm(String message, int hour, int minutes)
{
Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
.putExtra(AlarmClock.EXTRA_MESSAGE, message) //用于標識鬧鐘的自定義消息
.putExtra(AlarmClock.EXTRA_HOUR, hour) //鬧鐘的小時
.putExtra(AlarmClock.EXTRA_MINUTES, minutes); //鬧鐘的分鐘
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
注:為了調用ACTION_SET_ALARM,應用必須在清單文件中注冊SET_ALARM權限:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SET_ALARM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
-
創建定時器(ACTION_SET_TIMER)
示例Intent:
public void startTimer(String message, int seconds)
{
Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
.putExtra(AlarmClock.EXTRA_MESSAGE, message) //用于標識定時器的自定義消息
.putExtra(AlarmClock.EXTRA_LENGTH, seconds) //以秒為單位的定時器定時長度
.putExtra(AlarmClock.EXTRA_SKIP_UI, true); //一個布爾型值,用于指定響應定時器的應用在設置定時器時是否應跳過其 UI。
//若為 true,則應用應跳過任何確認 UI,直接啟動指定的定時器。
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
注:為了調用ACTION_SET_TIMER,應用必須在清單文件中注冊SET_ALARM權限:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SET_TIMER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
-
顯示所有鬧鈴(ACTION_SHOW_ALARMS)
盡管調用此 Intent 的應用并不多(使用它的主要是系統應用),但任何充當鬧鐘的應用都應實現此 Intent 過濾器,并通過顯示現有鬧鈴列表作出響應。
注:此 Intent 是在 Android 4.4(API 級別 19)中添加的。
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SHOW_ALARMS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
(2)日歷
-
添加日歷事件
(使用 ACTION_INSERT操作,并指定具有 Events.CONTENT_URI的數據 URI)
示例 Intent:
public void addEvent(String title, String location, Calendar begin, Calendar end)
{
Intent intent = new Intent(Intent.ACTION_INSERT)
.setData(Events.CONTENT_URI) //指定內容URI
.putExtra(Events.TITLE, title) //事件標題
.putExtra(Events.EVENT_LOCATION, location) //事件地點
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) //事件的開始時間(從新紀年開始計算的毫秒數)
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); //事件的結束時間(從新紀年開始計算的毫秒數)
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.INSERT" />
<data android:mimeType="vnd.android.cursor.dir/event" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
(3)相機
-
拍攝照片或視頻并將其返回
( ACTION_IMAGE_CAPTURE 或 ACTION_VIDEO_CAPTURE)
如需打開相機應用并接收拍攝的照片或視頻,可使用 ACTION_IMAGE_CAPTURE或 ACTION_VIDEO_CAPTURE操作。此外,還可在 EXTRA_OUTPUT extra 中指定希望相機將照片或視頻保存到的 URI 位置。
示例 Intent:
static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri mLocationForPhotos;
public void capturePhoto(String targetFilename)
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //使用相機拍照
intent.putExtra(MediaStore.EXTRA_OUTPUT, //設置相機應用應將照片或視頻文件保存到的 URI 位置
Uri.withAppendedPath(mLocationForPhotos, targetFilename));
if (intent.resolveActivity(getPackageManager()) != null) //確認存在對應Activity組件再開啟
{
//通過startActivityForResult獲得Intent中返回縮小尺寸的照片副本(縮略圖)
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK)
{
//拍照獲得的副本(縮略圖)以Bitmap形式保存在名為 "data"的 extra 字段中
Bitmap thumbnail = data.getParcelable("data");//獲得副本Bitmap
//此外,還可以通過URI訪問原始尺寸的照片或視頻,該URI為上面通過EXTRA_OUTPUT設置的URI
// Do other work with full size photo saved in mLocationForPhotos
...
}
}
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
處理此 Intent 的Activity 應檢查傳入Intent中有無EXTRA_OUTPUT extra,然后將拍攝的圖像或視頻保存在該 extra 指定的位置,并調用帶Intent的setResult(),該 Intent 將經過壓縮的縮略圖包括在名為 "data"的 extra中,注意相關權限的注冊。
-
以靜態圖像或視頻模式啟動相機應用(INTENT_ACTION_STILL_IMAGE_CAMERA或INTENT_ACTION_VIDEO_CAMERA)
假如僅僅是調用系統照相機拍照,不關心拍照結果,則可用靜態圖像模式下啟動相機,該action所啟動的Intent只是打開相機,不做任何處理,且將停留在相機應用里,拍完一張照片后不返回原來的應用,并將照片保存到系統的默認照片保存路徑。
示例 Intent:
public void capturePhoto()
{
Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
//Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivityForResult(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<!--若為視頻模式此處應為"android.media.action.VIDEO_CAMERA"-->
<action android:name="android.media.action.STILL_IMAGE_CAMERA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
(4)聯系人
-
選擇聯系人
(使用ACTION_PICK操作,并將 MIME 類型指定為Contacts.CONTENT_TYPE)
示例 Intent:
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)
{
//回調的結果Intent包含指向所選聯系人的 content:URI,
//響應會利用Contacts Provide API 為我們的應用授予該聯系人的臨時讀取權限,
//即使我們的應用不具READ_CONTACTS權限也沒有關系。
startActivityForResult(intent, REQUEST_SELECT_CONTACT); //確認存在對應Activity組件再開啟
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK)
{
Uri contactUri = data.getData(); //取出包含指向所選聯系人的 content:URI,讀取該聯系人的詳情并不需要READ_CONTACTS權限
// Do something with the selected contact at contactUri
...
}
}
-
選擇特定聯系人數據(使用ACTION_PICK操作,并指定特定 MIME 類型)
如需讓用戶選擇某一條聯系人信息,如電話號碼、電子郵件地址或其他數據類型,需使用ACTION_PICK操作,并指定MIME 類型為下列其中一個內容類型:
- CommonDataKinds.Phone.CONTENT_TYPE——從有電話號碼的聯系人中選取
- CommonDataKinds.Email.CONTENT_TYPE——從有電子郵件地址的聯系人中選取
- CommonDataKinds.StructuredPostal.CONTENT_TYPE——從有郵政地址的聯系人中選取
- ContactsContract下眾多其他 CONTENT_TYPE值中的一個
如果只需要檢索一種類型的聯系人數據,則此方法要比上一部分中使用的MIME 類型Contacts.CONTENT_TYPE更高效,因為結果可讓我們直接訪問所需數據,無需對聯系人提供程序執行更復雜的查詢。
示例 Intent:
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.resolveActivity(getPackageManager()) != null)
{
startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER); //確認存在對應Activity組件再開啟
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK)
{
Uri contactUri = data.getData(); //得到指向所選聯系人數據的 content:URI
String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
Cursor cursor = getContentResolver().query(contactUri, projection,
null, null, null); //從聯系人提供程序中查詢電話號碼
if (cursor != null && cursor.moveToFirst()) { //若cursor的返回值有效,取出查詢到的電話號碼
int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
String number = cursor.getString(numberIndex);
//對取出的電話號碼進行一些操作
...
}
}
}
由于查詢出來的cursor的初始位置是指向第一條記錄的前一個位置的,故使用cursor.moveToFirst()函數來指向查詢結果的第一個位置。一般通過判斷cursor.moveToFirst()的值為true或false來確定查詢結果是否為空。
-
查看聯系人(使用ACTION_VIEW操作,并使用 content:URI 作為 Intent 數據指定聯系人)
初次檢索聯系人URI 的方法主要有兩種:
- 使用ACTION_PICK返回的聯系人 URI,如上述所示(此方法不需要任何應用權限)
- 直接訪問所有聯系人的列表(此方法需要 READ_CONTACTS權限)
示例 Intent:
public void viewContact(Uri contactUri)
{
Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);//無需指定MIME類型,該類型可以從聯系人URI中推斷得出
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent);
}
}
-
編輯現有聯系人(ACTION_EDIT操作+data+extra)
如需編輯已知聯系人,需使用ACTION_EDIT操作,使用 content:URI 作為 Intent 數據指定聯系人,并將 extra 中由常量指定的任何已知聯系人信息包括在ContactsContract.Intents.Insert中
示例 Intent:
public void editContact(Uri contactUri, String email)
{
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(contactUri);
//可使用ContactsContract.Intents.Insert中定義的一個或多個extra,來填充聯系人詳情字段
intent.putExtra(Intents.Insert.EMAIL, email);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
-
插入聯系人(ACTION_INSERT操作+type+extra)
如需插入新聯系人,需使用ACTION_INSERT操作,將Contacts.CONTENT_TYPE指定為 MIME 類型,并將 extra 中由常量指定的任何已知聯系人信息包括在ContactsContract.Intents.Insert中。
示例 Intent:
public void insertContact(String name, String email)
{
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(Contacts.CONTENT_TYPE);
//可使用ContactsContract.Intents.Insert中定義的一個或多個extra
intent.putExtra(Intents.Insert.NAME, name);
intent.putExtra(Intents.Insert.EMAIL, email);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
(5)電子郵件
-
撰寫帶有可選附件的電子郵件
如需撰寫電子郵件,可根據其是否包括附件使用以下其中一項操作(action):
- ACTION_SENDTO(適用于不帶附件)
- ACTION_SEND(適用于帶一個附件)
- ACTION_SEND_MULTIPLE(適用于帶多個附件)
并使用下列 extra 鍵加入收件人和主題等電子郵件詳情: - Intent.EXTRA_EMAIL
包含所有“主送”收件人電子郵件地址的字符串數組。 - Intent.EXTRA_CC
包含所有“抄送”收件人電子郵件地址的字符串數組。 - Intent.EXTRA_BCC
包含所有“密件抄送”收件人電子郵件地址的字符串數組。 - Intent.EXTRA_SUBJECT
包含電子郵件主題的字符串。 - Intent.EXTRA_TEXT
包含電子郵件正文的字符串。 - Intent.EXTRA_STREAM
指向附件的 Uri。如果使用的是 ACTION_SEND_MULTIPLE 操作,應將其改為包含多個 Uri對象的 ArrayList。
示例 Intent:
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); //確認存在對應Activity組件再開啟
}
}
如果您想確保 Intent 只由電子郵件應用(而非其他短信或社交應用)進行處理,則需使用 ACTION_SENDTO操作并加入 "mailto:"數據架構。例如:
public void composeEmail(String[] addresses, String subject)
{
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // 只有電子郵件應用才能處理
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<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>
(6)文件存儲
-
檢索特定類型的文件(ACTION_GET_CONTENT操作+type)
如需請求用戶選擇文檔或照片等文件并向我們的應用返回文件引用,需使用ACTION_GET_CONTENT操作并指定所需 MIME 類型。 返回的文件引用對 Activity 的當前生命周期而言是瞬態引用,因此如果想稍后進行訪問,就必須導入可在稍后讀取的副本。用戶還可利用此 Intent 在進程中創建新文件(例如,用戶可以不選擇現有照片,而是用相機拍攝新照片)。
傳送至onActivityResult()方法的結果 Intent 包括的數據具有指向該文件的 URI。該 URI 可以是任何類型,如 http:URI、file:URI 或 content:URI。 不過,如果想將可選擇的文件限定為可從內容提供程序 (content:URI) 訪問的文件,以及通過openFileDescriptor()以文件流形式提供的文件,則應該為 Intent 添加CATEGORY_OPENABLE類別。
在 Android 4.3(API 級別 18)及更高版本上,我們還可以通過為 Intent 添加EXTRA_ALLOW_MULTIPLE并將其設置為 true,允許用戶選擇多個文件。然后我們就可以在getClipData()返回的ClipData對象中訪問每一個選定的文件。
用于獲取照片的示例 Intent:
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); //確認存在對應Activity組件再開啟
}
}
@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 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<data android:type="image/*" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.OPENABLE" />
</intent-filter>
</activity>
-
打開特定類型的文件
(ACTION_OPEN_DOCUMENT或ACTION_CREATE_DOCUMENT,并指定 MIME 類型)
如果只想讀取現有文件而不將其副本導入我們的應用,或者想就地打開和編輯文件,特別適合使用ACTION_OPEN_DOCUMENT操作(而不是使用ACTION_GET_CONTENT來導入應用的文件副本)。如果還需要允許用戶創建應用可寫入的新文檔,可改用 ACTION_CREATE_DOCUMENT操作
注意: Intent 必須指定 MIME 類型,并且必須聲明CATEGORY_OPENABLE類別。必要時,還可以使用EXTRA_MIME_TYPES extra 添加一個 MIME 類型數組來指定多個 MIME 類型——但這種情況下必須將setType()中的主 MIME 類型設置為 "*/*" - 用于獲取照片的示例 Intent:
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);
//只有系統能接收到ACTION_OPEN_DOCUMENT, 所以此處不需要判斷Activity是否存在
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
...
}
}
第三方應用實際上無法通過ACTION_OPEN_DOCUMENT操作響應 Intent,而是由系統接收此 Intent,然后在統一用戶界面中顯示各類應用提供的所有文件。
如需在該用戶界面中提供我們的應用的文件,并允許其他應用打開它們,則必須實現一個DocumentsProvider,并加入一個PROVIDER_INTERFACE Intent 過濾器("android.content.action.DOCUMENTS_PROVIDER")。例如:
<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>
(7)本地操作
-
叫車( ACTION_RESERVE_TAXI_RESERVATION操作)
示例 Intent:
public void callCar()
{
Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
-
地圖(使用ACTION_VIEW操作,并在Intent 數據中指定位置信息)
指定位置信息表示方式有多種,這里舉一個最簡單的示例:"geo:47.6,-122.3",表示顯示給定經度和緯度處的地圖
示例 Intent:
public void showMap(Uri geoLocation)
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(geoLocation);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<activity ...>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="geo" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
-
播放媒體文件(使用ACTION_VIEW操作,并在Intent 數據中指定位置信息)
示例 Intent:
public void playMedia(Uri file)
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(file);
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<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>
-
撥打電話
(使用ACTION_DIAL或ACTION_CALL操作,并使用數據URI指定電話號碼)
使用ACTION_DIAL操作撥打電話,會打開電話應用并顯示電話號碼,但用戶必需按撥打電話按鈕才能開始通話。
如需直接撥打電話,需使用ACTION_CALL操作,并使用數據URI指定電話號碼。電話應用打開時便會撥打電話,用戶無需按撥打電話按鈕。ACTION_CALL操作需要在清單文件中添加 CALL_PHONE權限:<uses-permission android:name="android.permission.CALL_PHONE" />
示例 Intent:
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); //確認存在對應Activity組件再開啟
}
}
-
發送短信
(ACTION_SENDTO、ACTION_SEND或ACTION_SEND_MULTIPLE操作+extra)
如需發起短信或彩信,需使用ACTION_SENDTO(無附件發送)、ACTION_SEND(帶附件的發送)或ACTION_SEND_MULTIPLE(帶多個附件的發送)其中一個 Intent 操作,并使用下列 extra 鍵指定電話號碼、主題和消息正文等消息詳情。
示例 Intent:
public void composeMmsMessage(String message, Uri attachment)
{
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType(HTTP.PLAIN_TEXT_TYPE);
intent.putExtra("sms_body", message); //表示消息正文的字符串
intent.putExtra(Intent.EXTRA_STREAM, attachment); //指向附件的圖像或視頻的Uri
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
如果想確保 Intent 只由短信應用(而非其他電子郵件或社交應用)進行處理,則需使用ACTION_SENDTO操作并設置data "smsto:"。例如:
public void composeMmsMessage(String message, Uri attachment)
{
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setData(Uri.parse("smsto:")); //確保只有短信應用進行處理
intent.putExtra("sms_body", message); //表示消息正文的字符串
intent.putExtra(Intent.EXTRA_STREAM, attachment); //指向附件的圖像或視頻的Uri
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent); //確認存在對應Activity組件再開啟
}
}
示例 Intent 過濾器:
<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>
-
設置
如需在應用要求用戶更改內容時打開某個系統設置屏幕,可使用下列其中一個 Intent 操作打開與操作名稱對應的設置屏幕:
- 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
示例 Intent:
public void openWifiSettings()
{
Intent intent = new Intent(Intent.ACTION_WIFI_SETTINGS); //打開Wifi設置界面
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent);
}
}
-
執行網頁搜索(使用ACTION_WEB_SEARCH操作,并在extra中指定搜索字符串)
示例 Intent:
public void searchWeb(String query)
{
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, query);//在SearchManager.QUERY extra 中指定搜索字符串
if (intent.resolveActivity(getPackageManager()) != null)
{
startActivity(intent);
}
}