https://blog.csdn.net/u012005313/article/details/47006689

使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式

Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

Intent一般可被用于启动活动启动服务、以及发送广播等场景

##########################################################

前期准备工作

1.创建一个项目(IntentTest),使用一个默认的空的活动MainActivity

2.修改activity_main.xml布局文件

  1.  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.  
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  3.  
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
  4.  
    android:paddingRight="@dimen/activity_horizontal_margin"
  5.  
    android:paddingTop="@dimen/activity_vertical_margin"
  6.  
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
  7.  
     
  8.  
    <Button
  9.  
    android:id="@+id/button_1"
  10.  
    android:layout_width="match_parent"
  11.  
    android:layout_height="wrap_content"
  12.  
    android:text="Button 1"
  13.  
    />
  14.  
     
  15.  
    </RelativeLayout>

2.新建一个活动SecondActivity

Activity Name = SecondActivity

Layout Name = activity_second

3.修改activity_second.xml布局文件

代码如下:

  1.  
    <?xml version="1.0" encoding="utf-8"?>
  2.  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.  
    android:layout_width="match_parent" android:layout_height="match_parent">
  4.  
     
  5.  
    <Button
  6.  
    android:id="@+id/button_2"
  7.  
    android:layout_width="match_parent"
  8.  
    android:layout_height="wrap_content"
  9.  
    android:text="Button 2"
  10.  
    />
  11.  
     
  12.  
    </LinearLayout>

解释:定义一个按钮,按钮上文本显示为Button 2

4.修改SecondActivity.java类

代码如下:

  1.  
    public class SecondActivity extends Activity {
  2.  
     
  3.  
    @Override
  4.  
    protected void onCreate(Bundle savedInstanceState) {
  5.  
    super.onCreate(savedInstanceState);
  6.  
    requestWindowFeature(Window.FEATURE_NO_TITLE); //隐藏标题栏
  7.  
    setContentView(R.layout.activity_second);
  8.  
    }

5.在AndroidManifest.xml中为SecondActivity活动进行注册

在<application></application>之间加入

  1.  
    <activity
  2.  
    android:name=".SecondActivity"
  3.  
    android:label="@string/title_activity_second" >
  4.  
    </activity>

note:SecondActivity不是主活动,不需要配置<intent-filter>标签里的内容

##############################################

显示使用Intent

Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)

该构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文

第二个参数Class则是指定想要启动的目标活动

Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动,它接收一个Intent参数

我们将构建好的Intent传入startActivity()方法就可以启动目标活动

1.修改MainActivity类中按钮的点击事件

  1.  
    @Override
  2.  
    protected void onCreate(Bundle savedInstanceState) {
  3.  
    super.onCreate(savedInstanceState);
  4.  
    setContentView(R.layout.activity_main);
  5.  
     
  6.  
    Button button=(Button)findViewById(R.id.button_1);
  7.  
    button.setOnClickListener(new View.OnClickListener() {
  8.  
    @Override
  9.  
    public void onClick(View v) {
  10.  
    Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  11.  
    Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  12.  
    startActivity(intent);
  13.  
    }
  14.  
    });
  15.  
    }

2.修改SecondActivity类中按钮的点击事件

  1.  
    @Override
  2.  
    protected void onCreate(Bundle savedInstanceState) {
  3.  
    super.onCreate(savedInstanceState);
  4.  
    requestWindowFeature(Window.FEATURE_NO_TITLE);
  5.  
    setContentView(R.layout.activity_second);
  6.  
     
  7.  
    Button button=(Button)findViewById(R.id.button_2);
  8.  
    button.setOnClickListener(new View.OnClickListener() {
  9.  
    @Override
  10.  
    public void onClick(View v) {
  11.  
    Toast.makeText(SecondActivity.this, "You Click Button 2", Toast.LENGTH_SHORT).show();
  12.  
    finish();
  13.  
    }
  14.  
    });
  15.  
    }

点击运行按钮,截图如下:

程序生成后,手机出现界面1,点击button1按钮,界面跳转到界面2,点击button2,界面跳转会界面1

###########################################

隐式使用Intent

隐式Intent通过指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动

1.修改AndroidManifest.xml文件,修改活动如下:

  1.  
    <activity
  2.  
    android:name=".SecondActivity"
  3.  
    android:label="@string/title_activity_second" >
  4.  
    <intent-filter>
  5.  
    <action android:name="com.example.activitytest.ACTION_START" />
  6.  
    <category android:name="android.intent.category.DEFAULT" />
  7.  
    </intent-filter>
  8.  
    </activity>

在<action>标签中指明当前活动可以响应com.example.activitytest.ACTION_START这个action,而<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。

只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category,这个活动才能响应Intent

2.修改MainActivity类中按钮的点击事件

  1.  
    @Override
  2.  
    protected void onCreate(Bundle savedInstanceState) {
  3.  
    super.onCreate(savedInstanceState);
  4.  
    setContentView(R.layout.activity_main);
  5.  
     
  6.  
    Button button=(Button)findViewById(R.id.button_1);
  7.  
    button.setOnClickListener(new View.OnClickListener() {
  8.  
    @Override
  9.  
    public void onClick(View v) {
  10.  
    Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  11.  
    //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  12.  
    Intent intent=new Intent("com.example.activitytest.ACTION_START");
  13.  
    startActivity(intent);
  14.  
    }
  15.  
    });
  16.  
    }

note: android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中

点击运行按钮,程序成功运行

#######################################################3

ADD:每个Intent中只能指定一个action,但却能够指定多个category.

上述的Intent中只有一个默认的category,再增加一个测试一下

1.修改AndroidManifest.xml文件

  1.  
    <activity
  2.  
    android:name=".SecondActivity"
  3.  
    android:label="@string/title_activity_second" >
  4.  
    <intent-filter>
  5.  
    <action android:name="com.example.activitytest.ACTION_START" />
  6.  
    <category android:name="android.intent.category.DEFAULT" />
  7.  
    <category android:name="com.example.activitytest.MY_CATEGORY" />
  8.  
    </intent-filter>
  9.  
    </activity>
  10.  
    </application>

2.修改MainActivity类中按钮的点击事件

  1.  
    Button button=(Button)findViewById(R.id.button_1);
  2.  
    button.setOnClickListener(new View.OnClickListener() {
  3.  
    @Override
  4.  
    public void onClick(View v) {
  5.  
    Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  6.  
    //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  7.  
    Intent intent=new Intent("com.example.activitytest.ACTION_START");
  8.  
    intent.addCategory("com.example.activitytest.MY_CATEGORY");
  9.  
    startActivity(intent);
  10.  
    }

运行程序,成功

#################################################

隐式Intent的更多用法

使用隐式Intent,不仅可以启动自己程序内部的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享称为可能

例如:在应用程序中展示一个网页

修改MainActivity中按钮点击事件

  1.  
    button.setOnClickListener(new View.OnClickListener() {
  2.  
    @Override
  3.  
    public void onClick(View v) {
  4.  
    Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  5.  
    //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  6.  
    //Intent intent=new Intent("com.example.activitytest.ACTION_START");
  7.  
    //intent.addCategory("com.example.activitytest.MY_CATEGORY");
  8.  
     
  9.  
    Intent intent=new Intent(Intent.ACTION_VIEW);
  10.  
    intent.setData(Uri.parse("http://www.baidu.com"));
  11.  
    startActivity(intent);
  12.  
    }
  13.  
    });

程序中首先指定Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW.

然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去

此时重新运行程序,在MainActivity界面点击按钮就可以打开系统浏览器

例如:在程序中调用系统拨号界面

修改MainActivity中按钮点击事件

  1.  
    Button button=(Button)findViewById(R.id.button_1);
  2.  
    button.setOnClickListener(new View.OnClickListener() {
  3.  
    @Override
  4.  
    public void onClick(View v) {
  5.  
    Toast.makeText(MainActivity.this, "You click Button 1", Toast.LENGTH_SHORT).show();
  6.  
    //Intent intent=new Intent(MainActivity.this, SecondActivity.class);
  7.  
    //Intent intent=new Intent("com.example.activitytest.ACTION_START");
  8.  
    //intent.addCategory("com.example.activitytest.MY_CATEGORY");
  9.  
     
  10.  
    Intent intent=new Intent(Intent.ACTION_DIAL);
  11.  
    intent.setData(Uri.parse("tel:10086"));
  12.  
    startActivity(intent);
  13.  
    }
  14.  
    });

Intent.ACTION_DIAL是一个Android系统的内置动作

--------------------- 本文来自 编号1993 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u012005313/article/details/47006689?utm_source=copy

Android Studio Intent使用(显式、隐式)的更多相关文章

  1. Android中Intent的显示和隐式使用

    Android应用程序中组件之间的通信都少不了Intent的使用,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件, ...

  2. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...

  3. 为什么在注册和注销的时候intent要改成隐式调用

    显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件. 隐式意图: ...

  4. 使用Intent实现Activity的隐式跳转

    相比于显式Intent,隐式Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action 和category 等信息,然后交由系统去分析这个Intent,并 ...

  5. Intent显示启动与隐式启动

    Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面分别介绍: 1.显示启动: 清单文件注册Activity <activity android:name=" ...

  6. 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待

    原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...

  7. C++显式隐式构造函数

    https://blog.csdn.net/starlee/article/details/1331268#comments

  8. android studio: 对齐成员变量及链式方法

    "File"-"Settings"-"Editor"-"Java"-"Wrapping and Braces& ...

  9. (转载)Android理解:显式和隐式Intent

    Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...

随机推荐

  1. Python 精进版SVIP版通过队列实现一个生产者消费者模型

    import time from multiprocessing import Process,Queue,JoinableQueue #生产者 def producer(q): for i in r ...

  2. python实现简单的定时任务

    1.首先安装 schedule 模块 命令行安装 pip install schedule pyCharm编辑器安装 File->setting->project:youProject-& ...

  3. 重开Vue2.0

    目录: 内容: 一.Vue内部指令: 1.v-if v-else&v-show v-if与v-show都是选择性显示内容的指令,但是二者之间有区别: 1.v-if:判断是否加载,在需要的时候加 ...

  4. 权限系统(RBAC)的数据模型设计

    前言: RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配. 之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统 ...

  5. Spark访问Hive表

    知识点1:Spark访问HIVE上面的数据 配置注意点:. 1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你${spark_home}/lib中(sp ...

  6. 几个特殊的IP地址

    1)私有地址     IP地址在全世界范围内唯一,看到这句话你可能有这样的疑问,像192.168.0.1这样的地址在许多地方都能看到,并不唯一,这是为何?Internet管理委员会规定如下地址段为私有 ...

  7. kafka-producer partitioner.class的使用

    partitioner.class的说明   在API客户端中封装好的partition( )方法会为消息选择一个分区编号.为了保证消息负载均衡到每个分区,可以通过使用默认方式或者 手动配置这个参数的 ...

  8. Dynamics 365 CRM large instance copy

    使用CRM 大家想必都做过copy. 从一个instance 复制到另外一个instance. 如果你是Dynamics 365 CRM 用户, 并且你的instance超过500GB,甚至1TB+的 ...

  9. 集合总结五(Hashtable的实现原理)

    一.概述 上一篇介绍了Java8的HashMap,接下来准备介绍一下Hashtable. Hashtable可以说已经具有一定的历史了,现在也很少使用到Hashtable了,更多的是使用HashMap ...

  10. phpStudy2018 在win7下切换php7不成功解决办法

    phpstudy 由2016升级到2018后,在切换版本时,php5.6及以下版本可以正常切换,切换7.0以上的版本时访问页面报 0xc000007b 错误,网上找了很多方法都没能解决,最后发现是没装 ...