Android studio Intent的使用
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的使用相关推荐
- 实验七 Android Studio Intent相机图库读取照片【班级名单列表视图03】
一.实验目的 掌握Intent启动外部应用并交互数据的方法,了解Android权限和访问外部文件的方法. 二.实验内容 在SQLite版本的班级名单基础上实现以下功能 1. 设计修改列表项的Fragm ...
- Android Studio Intent使用(显式、隐式)
https://blog.csdn.net/u012005313/article/details/47006689 使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面.Intent用法分 ...
- android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题
解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...
- Android Studio两模块间getLaunchIntentForPackage跳转,出现intent为null,已解决
Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.app2");if (inte ...
- Android Studio开发安卓5.0以上应用,使用Intent类启动Service发现语法提示不存在setClass,setAction,setAction等方法的原因
跟着教程<Android Service(二) Service使用>开发了Android Service,但由于开发中存在两个特殊性: 1. 测试机使用的是安卓版本5.1的酷派大神Note ...
- Android Studio App开发入门之在活动之间传递消息(附源码 超详细必看)(包括显示和隐式Intent,向上一个和下一个Activity发送数据)
运行有问题或需要源码请点赞关注收藏后评论区留言~~ 显示Intent和隐式Intent Intent是各个组件之间的信息沟通的桥梁,既能在Activity之间沟通,又能在Activity与Servi ...
- 文字策略游戏 android studio(学习intent,textview,等等)
闲来无事,写了一个类似于买房记的文字策略游戏 主要包含开始页面和游戏页面 activity_start.xml <?xml version="1.0" encoding=&q ...
- android servlet 登陆,Android Studio+Servlet+MySql实现登录注册
一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...
- 如何导出android studio程序,Android Studio 如何导出 Jar 给 Unity 使用
大致步骤如下:1.创建新的 Android Studio 工程2.为此 Android Studio 工程创建 Android Library 类库(也就是一个 Module)(后面就是用它生成 ja ...
最新文章
- linux longlong大小,Linux基本数据类型大小——int,char,long int,long long int
- Django 序列化三种方式 对象 列表 元组
- 关于VS AddIn的注册
- 多轮对话之对话管理:Dialog Management
- session mysql java_PHP自定义session处理方法,保存到MySQL数据库中
- as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
- 【LeetCode刷题】23. 合并K个排序链表
- 软件的生命周期分为哪几个阶段
- MySQL分页查询效率
- openGL中用Assimp库加载骨骼动画
- Installing vipm-17.0.2018-linux
- centos7安装netspeeder教程
- 串口转以太网通信源代码C语言C++编写支持多路转换双向通信支持UDP和TCP客户端
- win10user文件夹迁移_win10专业版用户文件夹迁移到另一个驱动器的方法
- python爬虫(五)爬虫实战
- 阿里云实人认证生成签名SignNature工具类
- 走近棒球运动·韩国职业棒球联盟·MLB棒球创造营
- 基于C语言实现http下载器
- 攻防世界--no-strings-attached
- iOS 使用HMAC
热门文章
- python逻辑表达式是什么_Python逻辑运算
- Linux中smba服务安装
- android 9 手机硬件性能,骁龙855完胜!安兔兔2月Android手机性能榜单揭晓:小米9第一...
- 关于xboxone入华的结果
- android的筛选功能,android实现多条件筛选列表菜单筛选菜单
- xshell传文件到虚拟机linux,VM虚拟机和主机互传文件,使用xshell连接Ubuntu
- 数据库实验IDEA编程Java程序实现连接数据库以及增删改查JDBC
- Weex 前端框架介绍
- linux那个适合于旧电脑,最好的轻量级Linux发行版旧计算机 | MOS86
- 中国首款7nm座舱芯片发布 2022年率先在吉利旗下车型量产上车