2011年9月1日 星期四

Intent 用法大公開


How to use Intent to send an email, SMS, open a web browser, show map, etc.?
Intent 應該算是 Andorid 中特有的東西。你可以在 Intent 中,指定要應用程式執行的動作 (view, edit, dial),以及應用程式執行該動作時,所需要的資料。都指定好後,只要透過 startActivity(),Android 系統會自動尋找,最符合你指定要求的應用程式,並喚起執行該應用程式。
不過,這部份的文件還不是很完整。Reference of Available Intents 有列一些。底下是我收集的一些用法,分享出來給有需要的你。有些還沒有實際驗證過,如果發現有錯誤,或有新的用法,也請告訴我。
顯示網頁
  1. Uri uri = Uri.parse("http://google.com");  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  3. startActivity(it);  
顯示地圖
  1. Uri uri = Uri.parse("geo:38.899533,-77.036476");  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);   
  3. startActivity(it);   
  4. //其他 geo URI 範例  
  5. //geo:latitude,longitude  
  6. //geo:latitude,longitude?z=zoom  
  7. //geo:0,0?q=my+street+address  
  8. //geo:0,0?q=business+near+city  
  9. //google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=mapZoom  
路徑規劃
  1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  3. startActivity(it);  
  4. //where startLat, startLng, endLat, endLng are a long with 6 decimals like: 50.123456   
撥打電話
  1. //叫出撥號程式  
  2. Uri uri = Uri.parse("tel:0800000123");  
  3. Intent it = new Intent(Intent.ACTION_DIAL, uri);  
  4. startActivity(it);  
  1. //直接打電話出去  
  2. Uri uri = Uri.parse("tel:0800000123");  
  3. Intent it = new Intent(Intent.ACTION_CALL, uri);  
  4. startActivity(it);  
  5. //用這個,要在 AndroidManifest.xml 中,加上  
  6. //<uses-permission id="android.permission.CALL_PHONE" />  
傳送 SMS/MMS
  1. //叫起簡訊程式  
  2. Intent it = new Intent(Intent.ACTION_VIEW);  
  3. it.putExtra("sms_body""The SMS text");   
  4. it.setType("vnd.android-dir/mms-sms");  
  5. startActivity(it);  
  1. //傳送簡訊  
  2. Uri uri = Uri.parse("smsto:0800000123");  
  3. Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
  4. it.putExtra("sms_body""The SMS text");  
  5. startActivity(it);  
  1. //傳送 MMS  
  2. Uri uri = Uri.parse("content://media/external/images/media/23");  
  3. Intent it = new Intent(Intent.ACTION_SEND);   
  4. it.putExtra("sms_body""some text");   
  5. it.putExtra(Intent.EXTRA_STREAM, uri);  
  6. it.setType("image/png");   
  7. startActivity(it);  
  8.   
  9. //如果是 HTC Sense 手機,你要用  
  10. Intent sendIntent = new Intent("android.intent.action.SEND_MSG");    
  11. sendIntent.putExtra("address", toText);    
  12. sendIntent.putExtra(Intent.EXTRA_SUBJECT, "subject");   
  13. sendIntent.putExtra("sms_body", textMessage);    
  14. sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(url));   
  15. sendIntent.setType("image/jpeg");    
  16. startActivity(sendIntent);  
  17.   
  18. //底下這段更好,可在所有手機上用  
  19. //refer to http://stackoverflow.com/questions/2165516/sending-mms-into-different-android-devices  
  20. Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mmsto:<number>");   
  21. intent.putExtra("address", <number>);   
  22. intent.putExtra("subject", <subject>);   
  23. startActivity(intent);   
傳送 Email
  1. Uri uri = Uri.parse("mailto:xxx@abc.com");  
  2. Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
  3. startActivity(it);  
  1. Intent it = new Intent(Intent.ACTION_SEND);  
  2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");  
  3. it.putExtra(Intent.EXTRA_TEXT, "The email body text");  
  4. it.setType("text/plain");  
  5. startActivity(Intent.createChooser(it, "Choose Email Client"));  
  1. Intent it=new Intent(Intent.ACTION_SEND);    
  2. String[] tos={"me@abc.com"};    
  3. String[] ccs={"you@abc.com"};    
  4. it.putExtra(Intent.EXTRA_EMAIL, tos);    
  5. it.putExtra(Intent.EXTRA_CC, ccs);    
  6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");    
  7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");    
  8. it.setType("message/rfc822");    
  9. startActivity(Intent.createChooser(it, "Choose Email Client"));   
  1. //傳送影音附件檔  
  2. Intent it = new Intent(Intent.ACTION_SEND);  
  3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
  4. it.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mysong.mp3"));  
  5. it.setType("audio/mp3");  
  6. startActivity(Intent.createChooser(it, "Choose Email Client"));  
  1. //傳送圖片附件檔  
  2. Intent it = new Intent(Intent.ACTION_SEND);  
  3. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
  4. it.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/mypic.jpg"));  
  5. it.setType("image/jpeg");  
  6. startActivity(Intent.createChooser(it, "Choose Email Client"));  
顯示聯絡人清單
  1. Intent it = new Intent(Intent.ACTION_VIEW, People.CONTENT_URI);  
  2. startActivity(it);  
顯示某個朋友的詳細資料
  1. Uri uriPerson = ContentUris.withAppendedId(People.CONTENT_URI, 5); //5 是朋友的 ID  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uriPerson);  
  3. startActivity(it);  
播放多媒體
  1. Intent it = new Intent(Intent.ACTION_VIEW);  
  2. Uri uri = Uri.parse("file:///sdcard/song.mp3");  
  3. it.setDataAndType(uri, "audio/mp3");  
  4. startActivity(it);  
  1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  3. startActivity(it);  
從圖庫中回傳選到的圖片
  1. Intent it = new Intent(Intent.ACTION_GET_CONTENT);    
  2. it.addCategory(Intent.CATEGORY_OPENABLE);    
  3. it.setType("image/*");  
  4. startActivityForResult(it, 0);  
  5. //回傳的圖片可透過 it.getData() 取得圖片之 Uri  
啟動照相機,並將相片存在指定的檔案中
  1. Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    
  2. //假設你要將相片存在 /sdcard/xxx.jpg 中  
  3. File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/xxx.jpg");  
  4. it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));   
  5. startActivity(it, 0);  
Market 相關
  1. //尋找某個應用程式  
  2. Uri uri = Uri.parse("market://search?q=pname:pkg_name");  
  3. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  4. startActivity(it);  
  5. //where pkg_name is the full package path for an application  
  1. //顯示某應用程式詳細畫面  
  2. Uri uri = Uri.parse("market://details?id=pkg_name_or_app_id");  
  3. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  4. startActivity(it);  
  5. //where app_id is the application ID, find the ID   
  6. //by clicking on your application on Market home   
  7. //page, and notice the ID from the address bar  
Uninstall 應用程式
  1. Uri uri = Uri.fromParts("package", strPackageName, null);   
  2. Intent it = new Intent(Intent.ACTION_DELETE, uri);   
  3. startActivity(it);   
安裝 APK 檔
  1. Uri uri = Uri.parse("url_of_apk_file");  
  2. Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  3. it.setData(uri);  
  4. it.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);  
  5. it.setClassName("com.android.packageinstaller",  
  6.                 "com.android.packageinstaller.PackageInstallerActivity");  
  7. startActivity(it);   
  8. //make sure the url_of_apk_file is readable for all users  

沒有留言:

張貼留言