基本的理解:
根据个人目前的理解,Intent 出现在启动一个activity,调用或者绑定一个服务,广播时所传递的一个参数,然后可以在该Intent对象中加入一下额外的信息来实现信息的传递,扮演着 一个 信息传递者的作用,信息的负载
intent几个重要的参数:
- action,要执行的动作。 Intent中自带许多的标准Actions和Categories:Standard Activity Actions,Standard Broadcast Actions,Standard Categories
public static final String ACTION_MAIN = "android.intent.action.MAIN"; public static final String ACTION_VIEW = "android.intent.action.VIEW"; public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; public static final String ACTION_CALL = "android.intent.action.CALL";
- data和extras,执行动作要传递的数据和传递到目标所附加的信息
这是一个打开谷歌网站和进行关键字搜索的一个例子,设置两个动作分别是Intent.ACTION_VIEW和Intent.ACTION_WEB_SEARCH,前者需要指定网站的地址,后者需要指定关键字的内容。前者将网址的信息通过Uri.parse方法进行解析存到intent对象中,http:”或“https:”表示网络地址类型,“tel:”表示电话号码类型,“mailto:”表示邮件地址类型。而在进行关键字搜索时,将关键字通过putExtra()存入intent对象之中。还有一个方法可以将信息打包,利用Bundle对象,存入的时候:/** * 打开指定网页 * @param view */ public void invokeWebBrowser(View view) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.google.com.hk")); startActivity(intent); } /** * 进行关键字搜索 * @param view */ public void invokeWebSearch(View view) { Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "android"); //关键字 startActivity(intent); }
取出的时候:public void gotoTargetActivity(View view) { Intent intent = new Intent("com.scott.intent.action.TARGET"); Bundle bundle = new Bundle(); bundle.putInt("id", 0); bundle.putString("name", "scott"); intent.putExtras(bundle); startActivity(intent); }
当然我们也可以使用Intent的getIntExtra和getStringExtra方法获取,其数据源都是Intent中的Bundle类型的实例对象。Bundle bundle = intent.getExtras(); int id = bundle.getInt("id"); String name = bundle.getString("name");
- category:要执行动作的目标所具有的特质或行为归类。一般在主activity的清单文件中category的配置如下:
表示让应用程序出现在列表中。<category android:name="android.intent.category.LAUNCHER" />
几个常见的category如下:
Intent.CATEGORY_DEFAULT(android.intent.category.DEFAULT) 默认的category
Intent.CATEGORY_PREFERENCE(android.intent.category.PREFERENCE) 表示该目标Activity是一个首选项界面;
Intent.CATEGORY_BROWSABLE(android.intent.category.BROWSABLE)指定了此category后,在网页上点击图片或链接时,系统会考虑将此目标Activity列入可选列表,供用户选择以打开图片或链接。
在为Intent设置category时,应使用addCategory(String category)方法向Intent中添加指定的类别信息,来匹配声明了此类别的目标Activity。
利用Intent传递数据的另一项应用------返回结果
- 利用startActivityForResult(Intent intent , requestcode)设置请求码启动另外一个activity。自定义requestcode
private static final int REQUESTCODE = 1; Intent intent = new Intent(MainActivity.this,OtherActivity.class); startActivityForResult(intent,REQUESTCODE);
- 在另外一个activity里面利用setResult(Intent , resultcode)设置返回的结果和返回码
Intent intent = getIntent(); intent.putExtra("return",21); setResult(2,intent); finish();
- 在第一个activity里面重写onActivityResult()通过判断resultcode(结果码)和requestcode(请求码)来获得返回的Intent对象data,最后利用intent对象的方法来取出返回的结果
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(2 == resultCode){ if(REQUESTCODE == requestCode){ button.setText(String.valueOf(data.getIntExtra("return",0))); } } }
- requestcode与resultcode是为了识别数据是从哪个activity里面传递过来而设置的