Android 四大组件 —— 活动(活动的隐式跳转)
2016-06-19 22:27
363 查看
上一篇我们讨论了活动的显示跳转,现在来学习活动的隐式跳转
相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。
什么叫做合适的活动呢?简单来说就是可以响应我们这个隐式Intent 的活动,那么目前SecondActivity 可以响应什么样的隐式Intent 呢?额,现在好像还什么都响应不了,不过很快就会有了。
第一步 通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<activity
android:name="cn.com.qiang.buttonjump.SecondActivity">
<intent-filter >
<action android:name="jump"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在<action> 标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START 这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent 中还可能带有的category。只有<action>和<category>中的内容同时能够匹配上Intent 中指定的action 和category 时,这个活动才能响应该Intent。
第二步 在MainAcivity 中调用setAction 及 addCategory 则可以实现隐式跳转
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
重新运行程序,在MainActivity 的界面点击一下按钮,你同样成功启动SecondActivity了。不同的是,这次你是使用了隐式Intent 的方式来启动的,说明我们在<activity>标签下配置的action 和category 的内容已经生效了!
下面是具体代码:
MainActivity 部分:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
package cn.com.qiang.buttonjump;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
}
}
AndroidManfest.xml 部分
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com.qiang.buttonjump"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="cn.com.qiang.buttonjump.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.com.qiang.buttonjump.SecondActivity">
<intent-filter >
<action android:name="jump"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。
什么叫做合适的活动呢?简单来说就是可以响应我们这个隐式Intent 的活动,那么目前SecondActivity 可以响应什么样的隐式Intent 呢?额,现在好像还什么都响应不了,不过很快就会有了。
第一步 通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
<activity
android:name="cn.com.qiang.buttonjump.SecondActivity">
<intent-filter >
<action android:name="jump"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
在<action> 标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START 这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent 中还可能带有的category。只有<action>和<category>中的内容同时能够匹配上Intent 中指定的action 和category 时,这个活动才能响应该Intent。
第二步 在MainAcivity 中调用setAction 及 addCategory 则可以实现隐式跳转
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
重新运行程序,在MainActivity 的界面点击一下按钮,你同样成功启动SecondActivity了。不同的是,这次你是使用了隐式Intent 的方式来启动的,说明我们在<activity>标签下配置的action 和category 的内容已经生效了!
下面是具体代码:
MainActivity 部分:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
package cn.com.qiang.buttonjump;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("jump");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
}
});
}
}
AndroidManfest.xml 部分
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.com.qiang.buttonjump"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="cn.com.qiang.buttonjump.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="cn.com.qiang.buttonjump.SecondActivity">
<intent-filter >
<action android:name="jump"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
相关文章推荐
- Android 基础 —— 模拟实现拨打电话功能
- Android序列化的两种方式
- Android 基础 —— 活动的启动模式
- Android 四大组件 —— 服务
- Android 基础 —— 活动的生存周期
- android5.0之Vector Drawables(矢量图)
- FragmentManager后台保存机制
- Android 常用的ORM框架详解
- Android 常用的ORM框架详解
- Android 常用的ORM框架详解
- Android 四大组件 —— 广播(广播机制解析)
- Android 基础—— 对Context的理解与使用技巧
- android:configChanged的用法
- Android studio运行时出现ADB not responding. If you'd like to retry,then please manually kill "adb.exe"...
- Android 自定义新闻加载页面
- 最全Android开发常用工具类
- Android触摸屏事件派发机制详解与源码分析一(View篇)
- Android -- Looper.prepare()和Looper.loop() —深入版
- [置顶] Android开发必有功能,更新版本提示,检测是否有新版本更新。下载完成后进行安装。
- Android百度地图显示附近的位置