Android Studio Intent使用(显式、隐式)
https://blog.csdn.net/u012005313/article/details/47006689
使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式
Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
Intent一般可被用于启动活动、启动服务、以及发送广播等场景
##########################################################
前期准备工作
1.创建一个项目(IntentTest),使用一个默认的空的活动MainActivity
2.修改activity_main.xml布局文件
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
- android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
- <Button
- android:id="@+id/button_1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Button 1"
- />
- </RelativeLayout>
2.新建一个活动SecondActivity
Activity Name = SecondActivity
Layout Name = activity_second
3.修改activity_second.xml布局文件
代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent" android:layout_height="match_parent">
- <Button
- android:id="@+id/button_2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="Button 2"
- />
- </LinearLayout>
解释:定义一个按钮,按钮上文本显示为Button 2
4.修改SecondActivity.java类
代码如下:
- public class SecondActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏
- setContentView(R.layout.activity_second);
- }
5.在AndroidManifest.xml中为SecondActivity活动进行注册
在<application></application>之间加入
- <activity
- android:name=".SecondActivity"
- android:label="@string/title_activity_second" >
- </activity>
note:SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容
##############################################
显示使用Intent
Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)
该构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文
第二个参数Class则是指定想要启动的目标活动
Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动,它接收一个Intent参数
我们将构建好的Intent传入startActivity()方法就可以启动目标活动
1.修改MainActivity类中按钮的点击事件
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button button=(Button)findViewById(R.id.button_1);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
- Intent intent=new Intent(MainActivity.this, SecondActivity.class);
- startActivity(intent);
- }
- });
- }
2.修改SecondActivity类中按钮的点击事件
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.activity_second);
- Button button=(Button)findViewById(R.id.button_2);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(SecondActivity.this, "You Click Button 2", Toast.LENGTH_SHORT).show();
- finish();
- }
- });
- }
点击运行按钮,截图如下:
程序生成后,手机出现界面1,点击button1按钮,界面跳转到界面2,点击button2,界面跳转会界面1
###########################################
隐式使用Intent
隐式Intent通过指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动
1.修改AndroidManifest.xml文件,修改活动如下:
- <activity
- android:name=".SecondActivity"
- android:label="@string/title_activity_second" >
- <intent-filter>
- <action android:name="com.example.activitytest.ACTION_START" />
- <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
2.修改MainActivity类中按钮的点击事件
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button button=(Button)findViewById(R.id.button_1);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
- //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
- Intent intent=new Intent("com.example.activitytest.ACTION_START");
- startActivity(intent);
- }
- });
- }
note: android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中
点击运行按钮,程序成功运行
#######################################################3
ADD:每个Intent中只能指定一个action,但却能够指定多个category.
上述的Intent中只有一个默认的category,再增加一个测试一下
1.修改AndroidManifest.xml文件
- <activity
- android:name=".SecondActivity"
- android:label="@string/title_activity_second" >
- <intent-filter>
- <action android:name="com.example.activitytest.ACTION_START" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="com.example.activitytest.MY_CATEGORY" />
- </intent-filter>
- </activity>
- </application>
2.修改MainActivity类中按钮的点击事件
- Button button=(Button)findViewById(R.id.button_1);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
- //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
- Intent intent=new Intent("com.example.activitytest.ACTION_START");
- intent.addCategory("com.example.activitytest.MY_CATEGORY");
- startActivity(intent);
- }
运行程序,成功
#################################################
隐式Intent的更多用法
使用隐式Intent,不仅可以启动自己程序内部的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享称为可能
例如:在应用程序中展示一个网页
修改MainActivity中按钮点击事件
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
- //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
- //Intent intent=new Intent("com.example.activitytest.ACTION_START");
- //intent.addCategory("com.example.activitytest.MY_CATEGORY");
- Intent intent=new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse("http://www.baidu.com"));
- startActivity(intent);
- }
- });
程序中首先指定Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW.
然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去
此时重新运行程序,在MainActivity界面点击按钮就可以打开系统浏览器
例如:在程序中调用系统拨号界面
修改MainActivity中按钮点击事件
- Button button=(Button)findViewById(R.id.button_1);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
- //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
- //Intent intent=new Intent("com.example.activitytest.ACTION_START");
- //intent.addCategory("com.example.activitytest.MY_CATEGORY");
- Intent intent=new Intent(Intent.ACTION_DIAL);
- intent.setData(Uri.parse("tel:10086"));
- startActivity(intent);
- }
- });
Intent.ACTION_DIAL是一个Android系统的内置动作
--------------------- 本文来自 编号1993 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012005313/article/details/47006689?utm_source=copy
Android Studio Intent使用(显式、隐式)的更多相关文章
- Android中Intent的显示和隐式使用
Android应用程序中组件之间的通信都少不了Intent的使用,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件, ...
- Android开发:显式/隐式Intent
显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...
- 为什么在注册和注销的时候intent要改成隐式调用
显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件. 隐式意图: ...
- 使用Intent实现Activity的隐式跳转
相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并 ...
- Intent显示启动与隐式启动
Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面分别介绍: 1.显示启动: 清单文件注册Activity <activity android:name=" ...
- 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待
原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...
- C++显式隐式构造函数
https://blog.csdn.net/starlee/article/details/1331268#comments
- android studio: 对齐成员变量及链式方法
"File"-"Settings"-"Editor"-"Java"-"Wrapping and Braces& ...
- (转载)Android理解:显式和隐式Intent
Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...
随机推荐
- less的入门教程
CSS的短板 作为前端学习者的我们 或多或少都要学些 CSS ,它作为前端开发的三大基石之一,时刻引领着 Web 的发展潮向. 而 CSS 作为一门标记性语言,可能 给初学者第一印象 就是简单易懂,毫 ...
- Vue列表组件与弹窗组件示例
列表组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <me ...
- 机顶盒安装apk系列
1.湖南移动九州PTV-8508机顶盒安装第三方apk包 1.先把安装包放入U盘根目录下,插入机顶盒usb口 2.查看8508机顶盒IP地址 3.使用adb工具连接机顶盒,这款盒子的adb默认端口是8 ...
- 在xcode 上调试c程序
打开xcode 选择 Create a new Xcode project 选择Command Line Tool 给你的项目起个名,选择c语言 点击next 选择存储位置,就会制动生成一个项目,在项 ...
- vs2012 函数参数内存对齐引发编译错误
编译一个游戏库时,遇到个奇怪的问题.一个模板函数,形参是按值传入的.编译时实参是内存对齐过的,无法通过,引发类似下面的错误: error C2719: '_Val': formal parameter ...
- VS2017 对com组件调用返回错误hresult e_fail
解决步骤如下: 第一步: 第二步:进入VS2017 安装目录,如下(路径仅供参考) 执行:gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dl ...
- Win7系统安装Centos7.0双系统(一)
项目环境测试,过去在虚拟机安装只要配置好镜像很快就可以轻松安装,但是在真实机中安装就有些略坑.网上有很多说法是把iso文件中安装引导拷出来,试了很久还是觉得U盘镜像直接安装更便捷.靠谱.因为CentO ...
- 对于使用JDBC连接mysql数据时The server time zone value '¤¤°ê¼Ð·Ç®É¶¡'...的异常问题解决。
相信很多小伙伴和我一样遇到了这类问题,在使用JDBC连接mysql数据库的时候发生SQLException如下所示的异常情况! java.sql.SQLException: The server ti ...
- [转]MySQL group_concat设置group_concat_max_len
GROUP_CONCAT函数用于将多个字符串连接成一个字符串,在拼接成字符串时就会存在拼接长度的问题,mysql 默认的拼接最大长度为1024 个字节,由于1024个字节会出现不够用的情况,所以有时需 ...
- MFC文件处理
计算机室如何管理自身所存放着的大量的信息的呢?windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的. 面向存储的文件技术 什么是文件?计算机中, ...