Intent可以启动活动,服务,传递数据,发送广播等等
Intent 用法:
首先建一个新的Activity类 ,在AndroidManifest.xml 中注册该类,然后在第一个类中使用Intent启动新建活动
显示Intent :
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent);
Intent中有两个参数。第一个为Context,需要提供一个启动活动的Context。第二个参数是,启动的目标活动,然后使用Activity类中提供的startActivity方法
隐式 Intent:
在配置文件,<activity>标签下配置<intent-filter>来指定启动活动的action 和 category
AndroidManifest.xml中代码
<activity android:name=".SecondActivity" android:launchMode="singleInstance" > <intent-filter> <action android:name="com.example.activitytest.ACTION_START"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="com.example.activitytest.MY_CATEGORY"></category> </intent-filter> </activity>表明当前活动可以响应这个action,<category>标签中包含一些附加信息,可以更加精确的指明当前活动能响应的Intent中还有category,只有当action标签和category标签中内容同时和Intent中指定的action和category一致时,才能响应Intent
在Activity中加入
Intent intent = new Intent("com.example.activitytest.ACTION_START"); intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
不用加入intent.addCategory("android.intent.category.DEFAULT");
因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity是系统自动会加入该category
隐式 Intent还可以加入Android系统内置的动作
如 Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
可以打开百度网页
Intent传递数据:
使用Intent提供的putExtra()方法。可以在Intent中暂存一些数据(在当前Activity)
String data = "Hello";
Intent intent = new Intent...
intent.putExtra("extar_data", data);
putExtra()方法传递的是一个键值对。第一个是键,第二个是值。
接收Intent (要启动接收数据的Activity)
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");//通过键来获得intent中的数据
返回给一个活动数据是Intent:
需要使用startActivityForResult()来启动下一个活动,当下一个活动撤销时才会调用onActivityResult();方法,才能获得返回数据
在启动下一个活动时调用startActivityForResult()方法,两个参数
第一个参数 Intent
第二个参数 请求码:用来判断返回数据的来源
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intentn,1);
在下一个活动中调用setResult();两个参数
第一个参数 向上一个获得返回处理结果,一般用RESULT_OK 或者 RESULT_CANCELED;也可以自己定义,如1,2,3,等
第二个参数 讲带有数据的Intent传回去;
Intent intent = new Intent();//新建一个空的Intent
intent.putExtra(....);//加入内容
setResult(RESULT_OK,intent);//
finish();//撤销Activity
在第一个Activity中接收返回的数据
重写onActivityResult()方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if(requestCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData); } break; default: } }第一个参数,requestCode // 请求码
第二个参数,resultCode //setResult中返回的处理结果,RESULT_OK。。。。
第三个参数,Intent 数据
先通过switch语句选择是否来自于第二个Activity,再通过resultCode判断处理结果是否成功,最后将数据提取出来