Intent 用于通過(guò)描述您想在某個(gè) Intent 對(duì)象中執(zhí)行的簡(jiǎn)單操作(如“查看地圖”或“拍攝照片”)來(lái)啟動(dòng)另一應(yīng)用中的某個(gè) Activity。這種 Intent 稱作隱式 Intent,因?yàn)樗⒉恢付ㄒ獑?dòng)的應(yīng)用組件,而是指定一項(xiàng)操作并提供執(zhí)行該操作所需的一些數(shù)據(jù)。
當(dāng)您調(diào)用 startActivity() 或 startActivityForResult() 并向其傳遞隱式 Intent 時(shí),系統(tǒng)會(huì)將 Intent 解析為可處理該 Intent 的應(yīng)用并啟動(dòng)其對(duì)應(yīng)的 Activity。如果有多個(gè)應(yīng)用可處理 Intent,系統(tǒng)會(huì)為用戶顯示一個(gè)對(duì)話框,供其選擇要使用的應(yīng)用。
本頁(yè)面介紹幾種可用于執(zhí)行常見(jiàn)操作的隱式 Intent,按處理 Intent 的應(yīng)用類型分成不同部分。此外,每個(gè)部分還介紹如何創(chuàng)建 Intent 過(guò)濾器來(lái)公布您的應(yīng)用執(zhí)行相應(yīng)操作的能力。
PS :如果設(shè)備上沒(méi)有可接收隱式 Intent 的應(yīng)用,您的應(yīng)用將在調(diào)用 startActivity() 時(shí)崩潰。如需事先驗(yàn)證是否存在可接收 Intent 的應(yīng)用,請(qǐng)對(duì) Intent 對(duì)象調(diào)用 resolveActivity()。如果結(jié)果為非空,則至少有一個(gè)應(yīng)用能夠處理該 Intent,并且可以安全調(diào)用 startActivity()。如果結(jié)果為空,則您不應(yīng)使用該 Intent。如有可能,您應(yīng)禁用調(diào)用該 Intent 的功能。
鬧鐘類型
創(chuàng)建鬧鈴
創(chuàng)建新鬧鈴,需要使用 ACTION_SET_ALARM 操作并使用下文介紹的 extra 指定時(shí)間和消息等鬧鈴詳細(xì)信息。
操作
ACTION_SET_ALARM
Extra
EXTRA_HOUR (鬧鈴的小時(shí))
EXTRA_MINUTES(鬧鈴的分鐘)
EXTRA_MESSAGE (用于標(biāo)識(shí)鬧鈴的自定義消息)
EXTRA_DAYS (一個(gè) ArrayList,其中包括應(yīng)重復(fù)觸發(fā)該鬧鈴的每個(gè)工作日,每一天都必須使用 Calendar 類中的某個(gè)整型值(如 MONDAY)進(jìn)行聲明,對(duì)于一次性鬧鈴,無(wú)需指定此 extra)
EXTRA_RINGTONE(一個(gè) content: URI,用于指定鬧鈴使用的鈴聲,也可指定 VALUE_RINGTONE_SILENT 以不使用鈴聲,如需使用默認(rèn)鈴聲,則無(wú)需指定此 extra)
EXTRA_VIBRATE(一個(gè)布爾型值,用于指定該鬧鈴觸發(fā)時(shí)是否振動(dòng)。EXTRA_SKIP_UI一個(gè)布爾型值,用于指定響應(yīng)鬧鈴的應(yīng)用在設(shè)置鬧鈴時(shí)是否應(yīng)跳過(guò)其 UI。若為 true,則應(yīng)用應(yīng)跳過(guò)任何確認(rèn) UI,直接設(shè)置指定的鬧鈴)
例子:
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); }}
注意:在調(diào)用前需要添加鬧鐘權(quán)限
<uses-permission Android:name="com.android.alarm.permission.SET_ALARM" />
配置跳轉(zhuǎn)的activity 過(guò)濾器
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SET_ALARM" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
相機(jī)類型
拍攝照片或視頻并將其返回
如需打開(kāi)相機(jī)應(yīng)用并接收拍攝的照片或視頻,請(qǐng)使用 ACTION_IMAGE_CAPTURE 或 ACTION_VIDEO_CAPTURE 操作。此外,還可在 EXTRA_OUTPUT extra 中指定您希望相機(jī)將照片或視頻保存到的 URI 位置。
操作
ACTION_IMAGE_CAPTURE 或ACTION_VIDEO_CAPTURE
Extra
EXTRA_OUTPUT(相機(jī)應(yīng)用應(yīng)將照片或視頻文件保存到的 URI 位置(以 Uri 對(duì)象形式)
當(dāng)相機(jī)應(yīng)用成功將焦點(diǎn)歸還給您的 Activity(您的應(yīng)用收到 onActivityResult() 回調(diào))時(shí),您可以按通過(guò) EXTRA_OUTPUT 值指定的 URI 訪問(wèn)照片或視頻。)
static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri locationForPhotos;
public void capturePhoto(String targetFilename) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); }}@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
//返回的圖片數(shù)據(jù)
Bitmap thumbnail = data.getParcelableExtra("data");
...
}
}