步步爲營_Android開發課[4]_Intent學習

Focus on technology, enjoy life!—— QQ:804212028
瀏覽鏈接:http://blog.csdn.net/y18334702058/article/details/44624305


  • 主題:Intent學習
    -Intent(意圖)主要是解決Android應用的各項組件之間的通訊問題。Intent消息傳遞是一種組件間運行時綁定的機制。

Intent和Bundle機制

Intent和Bundle實現從一個Activity帶參數轉換到另一個Activity的代碼例子

在activity1的Intent裏綁定信息。

    Intent intent = new Intent(active1.this, active2.class);
    Bundle bundle = new Bundle();
    bundle.putString("NAME", "蛋蛋");
    intent.putExtras(bundle);
    startActivity(intent);

再到activity2裏取出信息。

    Bundle bundle = this.getIntent().getExtras();
    String str = bundle.getString("NAME");
    Log.v("tag",str);//在Logcat窗口打印獲取的信息

Intent和 Intent Filter區別:

-Intent在Android中被翻譯爲”意圖”,它是activity,service和broadcast receiver之間互相激活時傳遞信息的”信使”。它類似於我們WEB中的HttpServletRequest.
-而Intent Filter相當於我們給Servlet配置的url-patten, 用於匹配某個具體的Intent對象.

Intent用法舉例:

顯示網頁:

Uri uri = Uri.parse("http://www.google.com");
Intent it  = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);

顯示地圖:

Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);

路徑規劃:

Uri uri = Uri.parse("http://maps.google.com");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);

撥打電話:

Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(it);  
Uri uri = Uri.parse("tel.xxxxxx");
Intent it =new Intent(Intent.ACTION_CALL,uri);

要使用這個必須在配置文件中加入
<uses-permission id="android.permission.CALL_PHONE" />

發送短信

Uri uri = Uri.parse("smsto:0800000123");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
it.putExtra("sms_body", "The SMS text");   
startActivity(it); 

發送彩信

Uri uri = Uri.parse("content://media/external/images/media/23");   
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra("sms_body", "some text");   
it.putExtra(Intent.EXTRA_STREAM, uri);   
it.setType("image/png");   
startActivity(it);

發送Email

Uri uri = Uri.parse("mailto:[email protected]");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_EMAIL, "[email protected]");   
it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
it.setType("text/plain");   
startActivity(Intent.createChooser(it, "Choose Email Client"));  
Intent it=new Intent(Intent.ACTION_SEND);     
String[] tos={"[email protected]"};     
String[] ccs={"[email protected]"};     
it.putExtra(Intent.EXTRA_EMAIL, tos);     
it.putExtra(Intent.EXTRA_CC, ccs);     
it.putExtra(Intent.EXTRA_TEXT, "The email body text");     
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");     
it.setType("message/rfc822");     
startActivity(Intent.createChooser(it, "Choose Email Client"));

添加附件

Intent it = new Intent(Intent.ACTION_SEND);   
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
sendIntent.setType("audio/mp3");   
startActivity(Intent.createChooser(it, "Choose Email Client"));

播放多媒體

Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
Intent it = new Intent(Intent.ACTION_VIEW, uri);   
startActivity(it);  

Uninstall 程序

Uri uri = Uri.fromParts("package", strPackageName, null);   
Intent it = new Intent(Intent.ACTION_DELETE, uri);   
startActivity(it);

Intent中傳遞對象的兩種方法

一種是Bundle.putSerializable(Key,Object);
另一種是Bundle.putParcelable(Key,Object);
當然這些Object是有一定的條件的,前者是實現了Serializable接口,而後者是實現了Parcelable接口。

很多人知道在activity之間傳遞對象時有兩個選擇一個是Parcelable,另外一個是Serializable。但究竟我們該何時使用其中的一個呢?

1.在使用內存的時候,Parcelable類比Serializable性能高,所以推薦使用Parcelable類。
2.Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
3.Parcelable不能使用在要將數據存儲在磁盤上的情況,因爲Parcelable不能很好的保證數據的持續性在外界有變化的情況下。儘管Serializable效率低點,也不提倡用,但在這種情況下,還是建議你用Serializable。

Focus on technology, enjoy life!—— QQ:804212028
瀏覽鏈接:http://blog.csdn.net/y18334702058/article/details/44624305

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章