編輯:關於Android編程
Android 最重要的功能之一是應用能夠基於它要執行的“操作”向另一個應用發送用戶。 例如,如果您的應用有您要在地圖上顯示的公司地址,您無需在顯示地圖的應用中構建 Activity。 而是可以創建使用 Intent 查看地址的請求。Android 系統之後啟動可以在地圖上顯示該地址的應用。
用 Intent 在自己應用中的 Activity 之間進行導航。 您通常使用顯式 Intent 執行此操作,該 Intent 定義您希望啟動的組件的確切類名稱。 但是,當您希望另一應用執行操作時,比如“查看地圖”,您必須使用隱含 Intent。
展示如何針對特定操作創建隱含 Intent,以及如何使用該 Intent 啟動在另一個應用中執行操作的 Activity。
隱含 Intent 不聲明要啟動的組件的類名稱,而是聲明要執行的操作。 該操作指定您要執行的操作,比如查看、編輯、發送或 獲取 某項。 Intent 通常還包含與操作關聯的數據,比如您要查看的地址或您要發送的電子郵件消息。根據要創建的 Intent,數據可能是 Uri、多種其他數據類型之一,或 Intent 可能根本就不需要數據。
例如,此處顯示如何使用指定電話號碼的 Uri 數據創建發起電話呼叫的 Intent:
Uri number = Uri.parse(“tel:5551234”); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
當您的應用通過調用 startActivity() 調用此 Intent 時,“電話”應用會發起向指定電話號碼的呼叫。
// Map point based on address Uri location = Uri.parse(“geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California”); // Or map point based on latitude/longitude // Uri location = Uri.parse(“geo:37.422219,-122.08364?z=14”); // z param is zoom level Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
Uri webpage = Uri.parse(“http://www.android.com“); Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
其他類型的隱含 Intent 需要提供不同數據類型(比如,字符串)的“額外”數據。 您可以使用各種 putExtra() 方法添加一條或多條 extra 數據。
默認情況下,系統基於所包含的 Uri 數據確定 Intent 需要的相應 MIME 類型。如果您未在 Intent 中包含 Uri,您通常應使用 setType() 指定與 Intent 關聯的數據的類型。 設置 MIME 類型可進一步指定哪些類型的 Activity 應接收 Intent。
Intent emailIntent = new Intent(Intent.ACTION_SEND); // The intent does not have a URI, so declare the "text/plain" MIME type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"}); // recipients emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text"); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment")); // You can also attach multiple items by passing an ArrayList of Uris
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI); Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30); Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); calendarIntent.putExtra(Events.TITLE, "Ninja class"); calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
只有 API 級別 14 或更高級別支持此日歷事件 Intent。
盡可能具體地定義您的 Intent 非常重要。例如,如果您想要使用 ACTION_VIEW Intent 顯示圖像,您應指定 MIME 類型 image/*。這可防止可“查看”數據的其他類型的應用(比如地圖應用)被 Intent 觸發。
盡管 Android 平台保證某些 Intent 可以分解為內置應用之一(比如,“電話”、“電子郵件”或“日歷”應用),您應在調用 Intent 之前始終包含確認步驟。
如果您調用了 Intent,但設備上沒有可用於處理 Intent 的應用,您的應用將崩潰。
要確認是否存在可響應 Intent 的可用 Activity,請調用 queryIntentActivities() 來獲取能夠處理您的 Intent 的 Activity 列表。如果返回的 List 不為空,您可以安全地使用該 Intent。例如:
PackageManager packageManager = getPackageManager(); List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); boolean isIntentSafe = activities.size() > 0;
如果 isIntentSafe 是 true,則至少有一個應用將響應該 Intent。 如果它是 false,則沒有任何應用處理該 Intent。
在您需要在用戶嘗試使用它之前停用使用該 Intent 的功能時,您應在 Activity 初次啟動時執行此檢查。 如果您了解可處理 Intent 的特定應用,您還可以為用戶提供下載該應用的鏈接(請參閱如何在 Google Play 鏈接到您的產品)。
圖 當多個應用可處理 Intent 時顯示的選擇對話框示例。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPtK7tanE+tLRtLS9qMT6tcQgSW50ZW50ILKiyejWwyBleHRyYSDQxc+io6y199PDIHN0YXJ0QWN0aXZpdHkoKSC9q8bkt6LLzbj4z7XNs6GjyOe5+8+1zbPKtrHwv8m0psDtIEludGVudCC1xLbguPYgQWN0aXZpdHmjrMv8u+HOqtPDu6fP1Mq+ttS7sL/yuanG5NGh1PHSqsq508O1xNOm08OjrMjnzbwgy/nKvqGjyOe5+9a709DSu7j2IEFjdGl2aXR5ILSmwO0gSW50ZW50o6zPtc2zu+HBory0vavG5Mb0tq+hozwvcD4NCjxoMSBpZD0="例子">例子
startActivity(intent);
此處顯示完整的示例:如何創建查看地圖的 Intent,驗證是否存在處理 Intent 的應用,然後啟動它:
// Build the intent Uri location = Uri.parse(“geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California”); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); // Verify it resolves PackageManager packageManager = getPackageManager(); List activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; // Start an activity if it’s safe if (isIntentSafe) { startActivity(mapIntent); }
顯示應用選擇器
圖 選擇器對話框。
注意,當您通過將您的 Intent 傳遞至 startActivity() 而啟動 Activity 時,有多個應用響應 Intent,用戶可以選擇默認使用哪個應用(通過選中對話框底部的復選框;見圖 1)。當執行用戶通常希望每次使用相同應用進行的操作時,比如當打開網頁(用戶可能只使用一個網絡浏覽器)或拍照(用戶可能習慣使用一個相機)時,這非常有用。
但是,如果要執行的操作可由多個應用處理並且用戶可能 習慣於每次選擇不同的應用 — 比如“共享”操作, 用戶有多個應用分享項目 — 您應明確顯示選擇器對話框, 如圖 2 所示。選擇器對話框 強制用戶選擇用於每次操作的 應用(用戶不能對此操作選擇默認的應用)。
請使用 createChooser() 創建Intent 並將其傳遞給 startActivity()。例如:
Intent intent = new Intent(Intent.ACTION_SEND); … // Always use string resources for UI text. // This says something like “Share this photo with” String title = getResources().getString(R.string.chooser_title); // Create intent to show chooser Intent chooser = Intent.createChooser(intent, title); // Verify the intent will resolve to at least one activity if (intent.resolveActivity(getPackageManager()) != null) { startActivity(chooser); }
這將顯示一個對話框,其中包含響應傳遞給 createChooser() 方法的 Intent 的應用列表,並且將提供的文本用作對話框標題。
背景: 在做android客戶端測試的時候,有時候需要監控cpu/mem/電量消耗/界面加載時間/流量等等指標。於是俺們就上下求索,網友告訴我
前言Runtime是一套比較底層的純C語言API,包含了很多底層的C語言API。在我們平時編寫的OC代碼中,程序運行時,其實最終都是轉成了Runtime的C語言代碼。Ru
android中的json的讀取1.讀取Json文件中的json內容首先在將json文件放在目錄assets下:test.json {programmers:[
在Level5以上(包含)中,Activity類中的方法:public void onAttachedToWindow ()就能對Home鍵進行捕獲。具體代碼如下:Mai