Android 一一 Intent在活动之间穿梭
来源:互联网 发布:千金方医药软件 编辑:程序博客网 时间:2024/05/16 23:32
在我们的手机App中,点击应用图标,进入的界面就是该应用的主活动,当我们点击其他按钮进去其他的活动,这样的过程该如何实现呢? 换句话说就是怎样才能由主活动跳转到其他活动?
Intent
Intent 大致可以分为两种: 显式 Intent 和 隐式 Intent
显示Intent
首先右击包名-->New-->Activity-->Empty Activity, 会弹出一个创建活动的对话框,可以给活动命名, 勾选Generate Layout File,给布局文件起名, 但不要勾选 Launcher Activity选项(因为这个选项用于设置主活动).
注意: 任何一个活动都是需要在 AndroidManifest.xml 中注册, 不过 Android Studio 已经帮我们自动完成了. 可以进入 AndroidManifest.xml 中看看, 由于 SecondActivity不是主活动.因此不需要配置<intent-filter>标签里的内容,注册活动的代码也很简单.
Intent(意图) 是 Android程序中各组件之间进行交互的一种重要方式, 它不仅可以指明当前组件想要执行的动作, 还可以在不同组件之间传递数据. Intent一般可被用于启动活动, 启动服务以及发送广播等场景.
Intent 有多个构造函数的重载, 其中一个是Intent (Context packageContent, Class<?>cls). 这个构造函数接收两个参数,第一个参数Content 要求提供一个启动活动的上下文,第二个参数Class 则是指定想要启动的目标活动, 通过这个构造函数就可以构建出 Intent 的 "意图". Activity类中 提供了 一个startActivity() 方法, 这个方法是专门用于启动活动的, 它接收一个Intent 参数.
效果:
AndroidManifest.xml 文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sunny.explicitintent"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity"></activity> </application></manifest>FirstActivity类
package com.example.sunny.explicitintent;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); // 创建按钮 Button btn = (Button)findViewById(R.id.button_1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建意图 Intent intent = new Intent(FirstActivity.this,SecondActivity.class); // 开启意图 startActivity(intent); // 销毁活动// finish(); } }); }}
使用这种方式启动活动, Intent 的 "意图" 非常明显, 因此称之为 显示 Intent
隐式Intent
相比于显式 Intent ,隐式 Intent则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定一系列更为抽象的action 和 category 等信息,然后交由系统去分析这个Intent, 并帮我们找出合适的活动去启动.
通过在<activity>标签下配置<intent - filter>的内容,可以指定当前活动能够响应action 和 category, 打开 AndroidManifest.xml, 添加如下代码
<!-- 活动4 --> <activity android:name=".FourActivity"> <intent-filter> <!-- 指明了当前活动可以响应com.example.sunny.activitytest.ACTION_START这个action --> <action android:name="com.example.sunny.activitytest.ACTION_START" /> <!-- category标签 包含了一些附加信息 --> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
只有<action> 和 <category> 中的内容同时能够匹配上Intent中指定的action 和 category时, 这个活动才能响应 Intent.
ThirdActivity类
public class ThirdActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); Button btn = (Button)findViewById(R.id.button_1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建隐式意图 // 当<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent // 每一个Intent只能指定一个action,但却能指定多个category Intent intent = new Intent("com.example.sunny.activitytest.ACTION_START"); // 注意: 因为category是一种默认的category,在调用startActivity方法会自动将category添加到Intent. startActivity(intent); } }); }}
在上面代码中 没有看到 category 为什么也能响应,因为 android.intent.category.DEFAULT 是一种默认的category,在调用 startActivity()方法的时候会自动将这个 category 添加到 Intetn.每一个Intent 中只能指定一个action,但却能指定多个 category.
我们可以在ThirdActivity类中再添加一个
intent.addCategory("com.example.sunny.activitytest.ZY_CATEGORY");
然后运行程序会发现报错, 这是因为刚刚在Intent中添加的 category,在FourActivity 的<intent - filter>标签中并没有声明可以响应这个
category,所以就出现了没有任何活动能够响应该Intent的情况.
<!-- 活动4 --> <activity android:name=".FourActivity"> <intent-filter> <!-- 指明了当前活动可以响应com.example.sunny.activitytest.ACTION_START这个action --> <action android:name="com.example.sunny.implicitintent.ACTION_START" /> <!-- category标签 包含了一些附加信息 --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.sunny.implicitintent.ZY_CATEGORY" /> </intent-filter> </activity>
效果如显示Intent相同.
更多隐式 Intent 的用法
使用隐式Intent ,我们可以启动自己程序内的活动, 还可以启动其他程序的活动,这使得 Android多个应用程序之间的功能共享
称为可能, 比如说 在应用程序中需要展示一个网页,只需要调用系统的浏览器来打开这个网页即可!
public class ThirdActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_third); Button btn = (Button)findViewById(R.id.button_1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建隐式意图 // 当<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent // 每一个Intent只能指定一个action,但却能指定多个category// Intent intent = new Intent("com.example.sunny.implicitintent.ACTION_START"); // 注意: 因为category是一种默认的category,在调用startActivity方法会自动将category添加到Intent.// intent.addCategory("com.example.sunny.implicitintent.ZY_CATEGORY");// startActivity(intent); // 打开一个网页// Intent intent = new Intent(Intent.ACTION_VIEW);// intent.setData(Uri.parse("http://www.baidu.com"));// startActivity(intent); // 调用系统拨号功能 Intent intent1 = new Intent(Intent.ACTION_DIAL); intent1.setData(Uri.parse("tel:10086")); startActivity(intent1); } }); }}
- Android 一一 Intent在活动之间穿梭
- Android学习 (三) 在活动之间穿梭之Intent
- 使用Intent在活动之间穿梭
- 活动——Intent在活动之间穿梭
- 使用Intent在活动之间穿梭(Intent初识)
- 【Android成长之路】Intent初体验—使用Intent 在活动之间穿梭(一)
- Android之Activity(二):使用Intent在活动之间穿梭
- 第2章 使用Intent在活动之间穿梭
- 使用intent在活动之间穿梭——使用显式Intent
- 使用intent在活动之间穿梭——使用隐式Intent
- 使用Intent在活动间穿梭 --7
- 使用Intent在活动间穿梭
- 第一行安卓代码——使用Intent在活动之间穿梭2.3
- 使用 Intent 在 Activity 之间穿梭
- 使用 Intent 在 Activity 之间穿梭
- android第五节在活动中穿梭
- Android学习笔记•从零开始•第二天•Intent-穿梭在Activity之间
- Android学习笔记之Intent穿梭于各个Activity之间
- 数据结构 图的初始化
- 3.Json获取值的方式是data.key
- 关于php的cgi,php-fpm的关系
- c++内存模型------计算机系统核心概念及软硬件实现
- dhcp6c
- Android 一一 Intent在活动之间穿梭
- Cookie的跨域共享
- 算法排序(3):选择排序
- Prime Path
- Ajax的Post提交与Get提交的不同方式
- 51Nod 1445
- Codeforces812C Sagheer and Nubian Market(贪心+二分)
- 数据可视化
- 深入解析HashMap、HashTable