在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Intent的發(fā)送
檢測常用的手勢
優(yōu)化layout的層級
用戶輸入
管理應用的內存
聯(lián)系人信息
開發(fā)輔助程序
Android多媒體
添加語音功能
顯示位置地址
提供向下與橫向導航
支持游戲控制器
訪問可穿戴數(shù)據層
處理多點觸控手勢
全屏沉浸式應用
為多線程創(chuàng)建管理器
數(shù)據保存
Intent的發(fā)送
更新Notification
優(yōu)化下載以高效地訪問網絡
打印
打包可穿戴應用
接收從其他App傳送來的數(shù)據
發(fā)送與接收消息
建立靈活動態(tài)的UI
處理鍵盤輸入
Building a Work Policy Controller
建立測試環(huán)境
創(chuàng)建表盤
分享文件
顯示Notification進度
實現(xiàn)自適應UI流(Flows)
使用設備管理策略增強安全性
使用能感知版本的組件
執(zhí)行網絡操作
建立文件分享
添加移動
更新你的Security Provider來對抗SSL漏洞利用
支持鍵盤導航
創(chuàng)建和監(jiān)視地理圍欄
發(fā)送并同步數(shù)據
使用BigView樣式
無線連接設備
提供向上導航與歷史導航
最小化定期更新造成的影響
實現(xiàn)向下的導航
支持不同的屏幕大小
Android 可穿戴應用
添加動畫
顯示聯(lián)系人頭像
使用OpenGL ES顯示圖像
處理輸入法可見性
分享文件
保持設備喚醒
淡化系統(tǒng)Bar
使用NFC分享文件
保存到Preference
Android聯(lián)系人信息與位置信息
創(chuàng)建標準的網絡請求
使用Drawables
管理Bitmap的內存使用
管理Activity的生命周期
按需加載視圖
傳輸資源
為可穿戴設備創(chuàng)建自定義UI
在一個線程中執(zhí)行一段特定的代碼
性能優(yōu)化
隱藏導航欄
創(chuàng)建目錄瀏覽器
為多種大小的屏幕進行規(guī)劃
View間漸變
使用觸摸手勢
高效加載大圖
使用CursorLoader在后臺加載數(shù)據
創(chuàng)建抽屜式導航(navigation drawer)
管理音頻焦點
創(chuàng)建后臺服務
創(chuàng)建功能測試
創(chuàng)建使用Material Design的應用
停止與重啟Activity
添加一個簡便的分享功能
啟動Activity時保留導航
TV應用清單
創(chuàng)建向后兼容的UI
?# 優(yōu)化自定義View
創(chuàng)建單元測試
在UI上顯示Bitmap
建立OpenGL ES的環(huán)境
構建表盤服務
JNI Tips
建立搜索界面
實現(xiàn)自定義View的繪制
使用HTTPS與SSL
按需操控BroadcastReceiver
分享簡單的數(shù)據
繪制形狀
Android位置信息
創(chuàng)建并運行可穿戴應用
執(zhí)行 Sync Adpater
獲取最后可知位置
創(chuàng)建 Android 項目
實現(xiàn)高效的導航
退出全屏的Activity
創(chuàng)建Card
兼容音頻輸出設備
同步數(shù)據單元
傳輸數(shù)據時避免消耗大量電量
保存到文件
緩存Bitmap
提供配置 Activity
調度重復的鬧鐘
實現(xiàn)輔助功能
重復的下載是冗余的
隱藏狀態(tài)欄
實現(xiàn)自定義的網絡請求
規(guī)劃界面和他們之間的關系
使用Sync Adapter傳輸數(shù)據
TV應用內搜索
響應觸摸事件
使用Google Cloud Messaging(已廢棄)
控制相機
Android網絡連接與云服務
請求分享一個文件
處理TV硬件
響應UI可見性的變化
使用網絡服務發(fā)現(xiàn)
指定輸入法類型
優(yōu)化電池壽命
創(chuàng)建TV應用
獲取聯(lián)系人列表
拖拽與縮放
啟動與停止線程池中的線程
創(chuàng)建 Sync Adpater
使用 WiFi P2P 服務發(fā)現(xiàn)
開始使用Material Design
代理至新的APIs
使用include標簽重用layouts
使得View可交互
高效顯示Bitmap
創(chuàng)建企業(yè)級應用
Fragments之間的交互
創(chuàng)建與執(zhí)行測試用例
綜合:設計我們的樣例 App
繪制表盤
建立簡單的用戶界面
自定義動畫
開發(fā)輔助服務
避免出現(xiàn)程序無響應ANR(Keeping Your App Responsive)
使用ViewPager實現(xiàn)屏幕滑動
設計高效的導航
Android分享操作(Building Apps with Content Sharing)
提供向后的導航
保持向下兼容
創(chuàng)建TV播放應用
縮放View
使用 WiFi 建立 P2P 連接
Android后臺任務
連接到網絡
為 Notification 添加頁面
使TV應用是可被搜索的
添加Action Bar
使用Material的主題
啟動另一個Activity
顯示正在播放卡片
適配不同的系統(tǒng)版本
輕松錄制視頻
創(chuàng)建可穿戴的應用
創(chuàng)建自定義的布局
重新創(chuàng)建Activity
使用CursorLoader執(zhí)行查詢任務
使用舊的APIs實現(xiàn)新API的效果
使用備份API
安全要點
Android入門基礎:從這里開始
保存并搜索數(shù)據
根據網絡連接類型來調整下載模式
使用Tabs創(chuàng)建Swipe視圖
SMP(Symmetric Multi-Processor) Primer for Android
解析 XML 數(shù)據
使用 Volley 傳輸網絡數(shù)據
建立ActionBar
Android交互設計
使用Intent修改聯(lián)系人信息
增加搜索功能
輕松拍攝照片
定義形狀
測試你的Activity
在 Notifcation 中接收語音輸入
與其他應用的交互
管理系統(tǒng)UI
追蹤手勢移動
Android界面設計
執(zhí)行 Android 程序
顯示確認界面
創(chuàng)建Lists與Cards
打印HTML文檔
創(chuàng)建TV應用
為多屏幕設計
定義Shadows與Clipping視圖
使用Fragment建立動態(tài)UI
接收Activity返回的結果
布局變更動畫
定位常見的問題
自定義ActionBar的風格
定義Layouts
發(fā)送簡單的網絡請求
啟動與銷毀Activity
與UI線程通信
非UI線程處理Bitmap
創(chuàng)建TV布局
提升Layout的性能
報告任務執(zhí)行狀態(tài)
判斷并監(jiān)測網絡連接狀態(tài)
兼容不同的設備
處理按鍵動作
優(yōu)化性能和電池使用時間
給其他App發(fā)送簡單的數(shù)據
Implementing App Restrictions
向后臺服務發(fā)送任務請求
展示Card翻轉動畫
管理ViewGroup中的觸摸事件
兼容不同的屏幕密度
通過藍牙進行調試
為可穿戴設備創(chuàng)建Notification
控制音量與音頻播放
獲取聯(lián)系人詳情
在表盤上顯示信息
提供向上的導航
滾動手勢動畫
幫助用戶在TV上找到內容
創(chuàng)建TV導航
為索引指定App內容
ActionBar的覆蓋疊加
Android Wear 上的位置檢測
保護安全與隱私的最佳策略
Ensuring Compatibility with Managed Profiles
解決云同步的保存沖突
獲取位置更新
創(chuàng)建List
測試程序
管理網絡的使用情況
為App內容開啟深度鏈接
推薦TV內容
建立一個Notification
管理音頻播放
設計表盤
拍照
處理控制器輸入動作
判斷并監(jiān)測設備的底座狀態(tài)與類型
處理查詢的結果
保存到數(shù)據庫
支持多個游戲控制器
創(chuàng)建 Stub Content Provider
使得ListView滑動順暢
處理數(shù)據層的事件
創(chuàng)建TV應用的第一步
使得你的App內容可被Google搜索
將 Notification 放成一疊
創(chuàng)建 Stub 授權器
暫停與恢復Activity
管理設備的喚醒狀態(tài)
Android圖像與動畫
打印照片
云同步
創(chuàng)建TV直播應用
為Notification賦加可穿戴特性
提供一個Card視圖
建立請求隊列(RequestQueue)
適配不同的語言
創(chuàng)建詳情頁
測試UI組件
接收其他設備的文件
創(chuàng)建自定義View
建立第一個App
創(chuàng)建2D Picker
監(jiān)測電池的電量與充電狀態(tài)
打印自定義文檔
抽象出新的APIs
通知提示用戶
獲取文件信息
運用投影與相機視角
在IntentService中執(zhí)行后臺任務
多線程操作
創(chuàng)建一個Fragment
添加Action按鈕
在不同的 Android 系統(tǒng)版本支持控制器
維護兼容性
發(fā)送文件給其他設備
創(chuàng)建TV游戲應用
創(chuàng)建自定義的View類
代碼性能優(yōu)化建議
Intent過濾
適配不同的屏幕

Intent的發(fā)送

編寫:kesenhoo - 原文:http://developer.android.com/training/basics/intents/sending.html

Android中最重要的特征之一就是可以利用一個帶有actionintent使當前app能夠跳轉到其他app。例如:如果我們的app有一個地址想要顯示在地圖上,我們并不需要在app里面創(chuàng)建一個activity用來顯示地圖,而是使用Intent來發(fā)出查看地址的請求。Android系統(tǒng)則會啟動能夠顯示地圖的程序來呈現(xiàn)該地址。

正如在1.1章節(jié):建立你的第一個App(Building Your First App)中所說的,我們必須使用intent來在同一個app的兩個activity之間進行切換。通常是定義一個顯式(explicit)的intent,它指定了需要啟動組件的類名。然而,當想要喚起不同的app來執(zhí)行某個動作(比如查看地圖),則必須使用隱式(implicit)的intent。

本課會介紹如何為特殊的動作創(chuàng)建一個implicit intent,并使用它來啟動另一個app去執(zhí)行intent中的action。

建立隱式的Intent

Implicit intents并不聲明要啟動組件的具體類名,而是聲明一個需要執(zhí)行的action。這個action指定了我們想做的事情,例如查看,編輯,發(fā)送或者是獲取一些東西。Intents通常會在發(fā)送action的同時附帶一些數(shù)據,例如你想要查看的地址或者是你想要發(fā)送的郵件信息。數(shù)據的具體類型取決于我們想要創(chuàng)建的Intent,比如Uri或其他規(guī)定的數(shù)據類型,或者甚至也可能根本不需要數(shù)據。

如果數(shù)據是一個Uri,會有一個簡單的Intent() constructor 用于定義action與data。

例如,下面是一個帶有指定電話號碼的intent。

Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

當app通過執(zhí)行startActivity()啟動這個intent時,Phone app會使用之前的電話號碼來撥出這個電話。

下面是一些其他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);

至于另外一些需要extra數(shù)據的implicit intent,我們可以使用 putExtra() 方法來添加那些數(shù)據。 默認的,系統(tǒng)會根據Uri數(shù)據類型來決定需要哪些合適的MIME type。如果我們沒有在intent中包含一個Uri, 則通常需要使用 setType() 方法來指定intent附帶的數(shù)據類型。設置MIME type 是為了指定應該接受這個intent的activity。例如:

  • 發(fā)送一個帶附件的email:
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[] {"jon@example.com"}); // 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
  • 創(chuàng)建一個日歷事件:
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");

Note: 這個intent for Calendar的例子只使用于>=API Level 14。

Note: 請盡可能的將Intent定義的更加確切。例如,如果想要使用ACTION_VIEW 的intent來顯示一張圖片,則還應該指定 MIME type 為image/*.這樣能夠阻止其他能夠 "查看" 其他數(shù)據類型的app(比如一個地圖app) 被這個intent叫起。

驗證是否有App去接收這個Intent

盡管Android系統(tǒng)會確保每一個確定的intent會被系統(tǒng)內置的app(such as the Phone, Email, or Calendar app)之一接收,但是我們還是應該在觸發(fā)一個intent之前做驗證是否有App接受這個intent的步驟。

Caution: 如果觸發(fā)了一個intent,而且沒有任何一個app會去接收這個intent,則app會crash。

為了驗證是否有合適的activity會響應這個intent,需要執(zhí)行queryIntentActivities() 來獲取到能夠接收這個intent的所有activity的list。若返回的List非空,那么我們才可以安全的使用這個intent。例如:

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;

如果isIntentSafetrue, 那么至少有一個app可以響應這個intent。false則說明沒有app可以handle這個intent。

Note:我們必須在第一次使用之前做這個檢查,若是不可行,則應該關閉這個功能。如果知道某個確切的app能夠handle這個intent,我們也可以向用戶提供下載該app的鏈接。(see how to link to your product on Google Play).

使用Intent啟動Activity

當創(chuàng)建好了intent并且設置好了extra數(shù)據后,通過執(zhí)行startActivity() 將intent發(fā)送到系統(tǒng)。若系統(tǒng)確定了多個activity可以handle這個intent,它會顯示出一個dialog,讓用戶選擇啟動哪個app。如果系統(tǒng)發(fā)現(xiàn)只有一個app可以handle這個intent,則系統(tǒng)將直接啟動該app。

startActivity(intent);

http://wiki.jikexueyuan.com/project/android-training-geek/images/intents-choice.png" alt="" />

下面是一個演示了如何創(chuàng)建一個intent來查看地圖的完整例子,首先驗證有app可以handle這個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<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent);
}

顯示分享App的選擇界面

請注意,當以startActivity()的形式傳遞一個intent,并且有多個app可以handle時,用戶可以在彈出dialog的時候選擇默認啟動的app(通過勾選dialog下面的選擇框,如上圖所示)。該功能對于用戶有特殊偏好的時候非常有用(例如用戶總是喜歡啟動某個app來查看網頁,總是喜歡啟動某個camera來拍照)。

然而,如果用戶希望每次都彈出選擇界面,而且每次都不確定會選擇哪個app啟動,例如分享功能,用戶選擇分享到哪個app都是不確定的,這個時候,需要強制彈出選擇的對話框。(這種情況下用戶不能選擇默認啟動的app)。

http://wiki.jikexueyuan.com/project/android-training-geek/images/intent-chooser.png" alt="intent-chooser.png" />

為了顯示chooser, 需要使用createChooser()來創(chuàng)建Intent

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().getText(R.string.chooser_title);
// Create and start the chooser
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);

這樣就列出了可以響應createChooser()中Intent的app,并且指定了標題。