Intent在Android中起到至關(guān)重要的作用稍走,在啟動下一個Activity这吻,發(fā)送廣播曲管,發(fā)送通知等方面剔猿,承擔著傳遞數(shù)據(jù)的作用,是不可或缺的。
其中入蛆,Intent可以分為顯示Intent與隱式Intent响蓉;又可以分為帶返回值的Intent和不帶返回值的Intent。
1.不帶返回值的Intent的使用:
Intent intent = new Intent(activity.this,nextActivity.class);
這里的第一個參數(shù)是當前的activity安寺,第二個參數(shù)是要執(zhí)行到的下一個activity;
intent傳遞參數(shù):
intent.putExtra(key,value);這里的key為了防止命名重復(fù)首尼,可以采用包名+變量名的命名方式挑庶。
在這之后啟動activity,startActivity(intent);
而在下一個activity接收傳遞的值软能,則只需要在onCreate()方法中用getIntent()的對應(yīng)方法去獲取迎捺。比如獲取一個Boolean類型的變量:
Boolean value = getIntent().getBooleanExtra(key);
2.帶返回值的Intent使用
activity中使用帶返回值的Intent,第一步的定義是一樣的,但是在啟動activity時查排,則使用另一個方法:startActivityForResult(intent,requestCode);其中參數(shù)requestCode將在你接收返回值時用到.在接收返回值時凳枝,可能當前的activity有多個activity有返回值,而根據(jù)你的requestCode就可以判斷是哪個activity返回的值跋核,從而做出相應(yīng)的處理岖瑰。
而在下一個activity中,接收傳遞的值是一樣的砂代;返回值則需要調(diào)用相應(yīng)的方法蹋订。
setResult(int resultCode,Intent data);其中resultCode表示返回的result值,判斷是否返回成功刻伊,一般寫Activity.OK露戒,而data則是Intent返回類型,這里封裝了要返回的值捶箱。
在父Activity中接收返回的值智什,則需要重寫onActivityResult(int requestCode,int resultCode,Intent data){}方法;
這里的requestCode則是剛才自己發(fā)送時候的requestCode,這里要用到了丁屎;resultCode則是剛才子Activity中返回的值荠锭,也要用到了;data則是返回的數(shù)據(jù)晨川。
3.隱式的Intent
Activity可以在AndroidManifest.xml聲明activity時节沦,在<intent-filter>下配置action與category,這樣的話在使用Intent的時候础爬,可以通過:Intent intent = new Intent("actionName");
intent.addCategory("category");的方式來實現(xiàn)隱式的啟用甫贯。
此外,還有一些系統(tǒng)的隱式Intent:
如:瀏覽器打開網(wǎng)頁:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("網(wǎng)址"));
調(diào)用撥號界面:
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("te;:10086"));
注:這是調(diào)用撥號界面看蚜,而不是直接撥打電話叫搁。在android升級到6.0之后,出現(xiàn)了運行時調(diào)用權(quán)限,而撥打電話則就是這樣的權(quán)限渴逻。此外疾党,撥號界面也是需要申請權(quán)限的。
發(fā)送消息:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra();
intent = Intent.CreateChooser(i,getString(R.String));//獲取所有的activity
獲取聯(lián)系人:
一個有返回值的Intent使用: