startActivity(intent);FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动,通过startActivity()方法来执行这个Intent。
2.隐式Intent
1.配置Activity
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="top.xiexiaodong.activity.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>2.代码跳转
Intent intent = new Intent("top.xiexiaodong.activity.ACTION_START");startActivity(intent);同时匹配<action>和<category>才能响应,android.intent.category.DEFAULT是一种默认的<category>,在调用startActivity()方法的时候会自动将这个<category>添加到Intent中。如果需要添加别的<category>,可以通过下面代码实现:
intent.addCategory("top.xiexiaodong.category.MY_CATEGORY");这里必须在AndroidManifest文件中添加这个<category>,代码如下:
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="top.xiexiaodong.activity.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="top.xiexiaodong.category.MY_CATEGORY" /> </intent-filter></activity>否则会报错:
No Activity found to handle Intent3.更多隐式Intent用法
1.打开浏览器
Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.xiexiaodong.top"));startActivity(intent);
2.打开拨号
Intent intent = new Intent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:10086"));startActivity(intent);可以配置AndroidMainfest文件,通过<data>标签,更精确地指定当前Activity能够响应什么类型的数据。<data>标签中主要可以配置以下内容:
android:scheme。用于指定数据的协议部分,如上例中的http部分。
android:host。用于指定数据的主机名部分,如上例中的www.xiexiaodong.top部分。
android:port。用于指定数据的端口部分,一般紧随在主机名后面。
android:path。用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只用<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent。可以配置如下内容,使其能够响应所有http协议的Intent,代码如下:
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="top.xiexiaodong.activity.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="top.xiexiaodong.category.MY_CATEGORY" /> <data android:scheme="http" /> </intent-filter></activity>二、Activity之间传数据
1.向下一个Activity传数据
1.发送
String data = "Hello SecondActivity";Intent intent = new Intent(FirstActivity.this, SecondActivity.class);intent.putExtra("extra_data", data);startActivity(intent);2.接收
Intent intent = getIntent();String data = intent.getStringExtra("extra_data");Log.d("SecondActivity", data);2.返回数据给上一个Activity
1.startActivityForResult
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1); // 1是唯一值即可2.setResult
Intent intent = new Intent();intent.putExtra("data_return", "Hello FirstActivity");setResult(RESULT_OK, intent); // 把带有参数的intent传回去finish();一般使用RESUTL_OK,RESULT_CANCEL这两个值。3.重写OnActivityResult()方法
@OverridePRotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnData); } break; default: break; }}
新闻热点
疑难解答