1.为什么要使用Intent?

Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动 服务、以及发送广播等场景,由于服务、广播等概念

Intent分为俩种:显示Intent 和隐式Intent

1.1显示Intent

显示类型一般创建在活动中,例如跳转页面:

Intent intent = new Intent(当前页面.this, 跳转的页面.class);
startActivity(intent);

1.2隐式Intent

隐式类型一般在 AndroidManifest.xml 配置

<activity android:name=".SecondActivity" >
<intent-filter>
//<action>标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action
<action android:name="com.example.activitytest.ACTION_START" />
//<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
//只有<action>和<category>中的内容同时能够匹配上 Intent 中指定的 action 和 category 时,这个活动才能响应该 Intent。

下面看一下主代码(MainActivity)的点击事件

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//我们使用了 Intent 的另一个构造函数,直接将 action 的字符串传了进去,表明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action 的活动
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);//在调用startActivity()方法的时候会自动将这个 category 添加到 Intent 中
}
});

隐式Intent更多用法扩展:

使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动, 这使得 Android 多个应用程序之间的功能共享成为了可能。比如说你的应用程序中需要展示 一个网页,这时你没有必要自己去实现一个浏览器(事实上也不太可能),而是只需要调用 系统的浏览器来打开这个网页就行了

例如点击按钮打开百度:

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//这是一个 Android 系统内置的动作
Intent intent = new Intent(Intent.ACTION_VIEW);
//然后通过 Uri.parse()方法,将一个网址字符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

还有很多功能,打开软件,百度等等。。。。

2.Intent传递数据

2.1向下一个活动传递数据

FirstActivity 向 SecondActivity 传递数据(向下)

FirstActivity 发送:

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//定义一个字符串数据便于传递
String data = "Hello SecondActivity";
//因为我们需要FirstActivity 向 SecondActivity 传递数据,所以这样写
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
//并通过 putExtra()方法传递了一个字符串。注意这里 putExtra()方法接收两个参数,第一个参数是键,用于后面从 Intent中取值,第二个参数才是真正要传递的数据
intent.putExtra("extra_data", data);
//开始执行
startActivity(intent);
}
});

SecondActivity 接收:

public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_layout);
//首先可以通过 getIntent()方法获取到用于启动 SecondActivity 的 Intent
Intent intent = getIntent();
//调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了
String data = intent.getStringExtra("extra_data");
//输出打印
Log.d("SecondActivity", data);
}
}

2.2返回数据给上一个活动

我们还以俩个活动为例MainActivity和MainAcitivity2:

MainActivity:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//首先定义一个按钮Button but = (Button) findViewById(R.id.but);//按钮监听事件but.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(MainActivity.this,Main2Activity.class);/*startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是求码,用于在之后的回调中判断数据的来源(请求码-----唯一就可以)*/startActivityForResult(intent,1);}});}@Override//重写onActivityResult//第一个参数 requestCode,即我们在启动活动时传入的请求码。第二个参数 resultCode,即我们在返回数据时传入的处理结果。第三个参数 data,即携带着返回数据的 Intent,下面就不做解释了protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {switch(requestCode){case 1:if(resultCode == RESULT_OK){String data_return = data.getStringExtra("data_return");Toast.makeText(this, ""+data_return, Toast.LENGTH_SHORT).show();}break;default:break;}}

Main2Activity:

public class Main2Activity extends AppCompatActivity {@Override//当用户按下 Back 键,就会去执行 onBackPressed()方法中的代码,我们在这里添加返回数据的逻辑就行了//这里就不做解释了,自己捂捂public void onBackPressed() {Intent intent = new Intent();intent.putExtra("data_return","Hello");setResult(RESULT_OK,intent);finish();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);//这俩步就不用多说了吧阿巴阿巴Button but2 = (Button) findViewById(R.id.but2);but2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//构建一个Intent,用来传数据而已,并没有其他意图Intent intent = new Intent();//用putExtra方法,来传输键值对intent.putExtra("data_return","Hello MainActivity");/*setResult方法接收俩个参数,第一个参数用于向上一个活动返回处理结果,一 般只 使用          RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去*/setResult(RESULT_OK,intent);//销毁当前活动finish();}});}
}

Android studio Intent的使用相关推荐

  1. 实验七 Android Studio Intent相机图库读取照片【班级名单列表视图03】

    一.实验目的 掌握Intent启动外部应用并交互数据的方法,了解Android权限和访问外部文件的方法. 二.实验内容 在SQLite版本的班级名单基础上实现以下功能 1. 设计修改列表项的Fragm ...

  2. Android Studio Intent使用(显式、隐式)

    https://blog.csdn.net/u012005313/article/details/47006689 使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面.Intent用法分 ...

  3. android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题

    解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...

  4. Android Studio两模块间getLaunchIntentForPackage跳转,出现intent为null,已解决

    Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.app2");if (inte ...

  5. Android Studio开发安卓5.0以上应用,使用Intent类启动Service发现语法提示不存在setClass,setAction,setAction等方法的原因

    跟着教程<Android Service(二) Service使用>开发了Android Service,但由于开发中存在两个特殊性: 1. 测试机使用的是安卓版本5.1的酷派大神Note ...

  6. Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)

     运行有问题或需要源码请点赞关注收藏后评论区留言~~ 显示Intent和隐式Intent Intent是各个组件之间的信息沟通的桥梁,既能在Activity之间沟通,又能在Activity与Servi ...

  7. 文字策略游戏 android studio(学习intent,textview,等等)

    闲来无事,写了一个类似于买房记的文字策略游戏 主要包含开始页面和游戏页面 activity_start.xml <?xml version="1.0" encoding=&q ...

  8. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

  9. 如何导出android studio程序,Android Studio 如何导出 Jar 给 Unity 使用

    大致步骤如下:1.创建新的 Android Studio 工程2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ja ...

最新文章

  1. linux longlong大小,Linux基本数据类型大小——int,char,long int,long long int
  2. Django 序列化三种方式 对象 列表 元组
  3. 关于VS AddIn的注册
  4. 多轮对话之对话管理:Dialog Management
  5. session mysql java_PHP自定义session处理方法,保存到MySQL数据库中
  6. as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
  7. 【LeetCode刷题】23. 合并K个排序链表
  8. 软件的生命周期分为哪几个阶段
  9. MySQL分页查询效率
  10. openGL中用Assimp库加载骨骼动画
  11. Installing vipm-17.0.2018-linux
  12. centos7安装netspeeder教程
  13. 串口转以太网通信源代码C语言C++编写支持多路转换双向通信支持UDP和TCP客户端
  14. win10user文件夹迁移_win10专业版用户文件夹迁移到另一个驱动器的方法
  15. python爬虫(五)爬虫实战
  16. 阿里云实人认证生成签名SignNature工具类
  17. 走近棒球运动·韩国职业棒球联盟·MLB棒球创造营
  18. 基于C语言实现http下载器
  19. 攻防世界--no-strings-attached
  20. iOS 使用HMAC

热门文章

  1. python逻辑表达式是什么_Python逻辑运算
  2. Linux中smba服务安装
  3. android 9 手机硬件性能,骁龙855完胜!安兔兔2月Android手机性能榜单揭晓:小米9第一...
  4. 关于xboxone入华的结果
  5. android的筛选功能,android实现多条件筛选列表菜单筛选菜单
  6. xshell传文件到虚拟机linux,VM虚拟机和主机互传文件,使用xshell连接Ubuntu
  7. 数据库实验IDEA编程Java程序实现连接数据库以及增删改查JDBC
  8. Weex 前端框架介绍
  9. linux那个适合于旧电脑,最好的轻量级Linux发行版旧计算机 | MOS86
  10. 中国首款7nm座舱芯片发布 2022年率先在吉利旗下车型量产上车