【Android】-- Intent(显式和隐式Intent)

这篇具有很好参考价值的文章主要介绍了【Android】-- Intent(显式和隐式Intent)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Intent?

Intent是各个组件之间信息沟通的桥梁,它用于Android各组件之间的通信,主要完成下列工作:

  • 标明本次通信请求从哪里来、到哪里去、要怎么走。
  • 发起方携带本次通信需要的数据内容,接收方从收到的意图中解析数据。
  • 发起方若想判断接收方的处理结果,意图就要负责让接收方传回应答的数据内容。

 Intent的组成部分

【Android】-- Intent(显式和隐式Intent)


一、显式Intent和隐式Intent

1、显式Intent

显式Intent,直接指定来源活动与目标活动,属于精确匹配,有三种构建方式:

  • 在Intent的构造函数中指定。
  • 调用意图对象的setClass方法指定。
  • 调用意图对象的setComponent方法指定。

 (1)在Intent构造函数中指定

例:

Intent intent = new Intent(this,ActNextActivity.class)//创建一个目标确定的意图

(2)调用意图对象的setClass方法指定

例:

Intent intent = new Intent();//创建新意图
intent.setClass(this,ActNextActivity.class)//设置意图要跳转的目标活动

(3)调用意图对象的setComponent方法指定

例:

Intent intent = new Intent();//创建新意图
//创建包含目标活动在内的组件名称对象
ComponentName component = new ComponentName(this,ActNextActivity.class);
intent.setComponent(component);//设置意图携带的组件信息

2、隐式Intent

没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配。

通常APP不希望向外部暴露活动名称,只给出一个事先定义好的标记串,这个动作名称标记串,可以是自己定义的动作,可以是已有的系统动作,常见系统动作取值如下:

【Android】-- Intent(显式和隐式Intent)

 例:

java

public class ActionUrlActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_url);
        findViewById(R.id.btn_dial).setOnClickListener(this);
        findViewById(R.id.btn_sms).setOnClickListener(this);
        findViewById(R.id.btn_my).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        String phoneNo = "12345";
        Intent intent = new Intent();
        switch (view.getId()){
            case R.id.btn_dial:
                //设置意图动作为准备拨号
                intent.setAction(Intent.ACTION_DIAL);
                Uri uri = Uri.parse("tel:"+phoneNo);
                intent.setData(uri);
                startActivity(intent);
                break;
            case R.id.btn_sms:
                //设置意图动作为发短信
                intent.setAction(Intent.ACTION_SENDTO);
                Uri uri2 = Uri.parse("smsto:"+phoneNo);
                intent.setData(uri2);
                startActivity(intent);
                break;
            case R.id.btn_my:
                intent.setAction("android.intent.action.NING");
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                startActivity(intent);
                break;
        }
    }
}

xml

<LinearLayout 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:orientation="vertical">
    
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="点击以下按钮向号码发起请求"/>

    <Button
        android:id="@+id/btn_dial"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳到拨号页面"/>

    <Button
        android:id="@+id/btn_sms"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳到短信页面"/>

    <Button
        android:id="@+id/btn_my"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳到我的页面"/>

</LinearLayout>

需要跳转到的自定义的页面的AndroidManifest.xml文件

        <activity
            android:name=".ButtonClickActivity"
            android:exported="true">//需要设置为true,意为允许其他应用跳转
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            //添加的代码:
            <intent-filter>
                <action android:name="android.intent.action.NING" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>

【Android】-- Intent(显式和隐式Intent)【Android】-- Intent(显式和隐式Intent)【Android】-- Intent(显式和隐式Intent)

 文章来源地址https://www.toymoban.com/news/detail-408856.html


到了这里,关于【Android】-- Intent(显式和隐式Intent)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++中static静态成员变量和静态成员函数、explcit和隐式类型转换、友元函数()详解

    声明为 static 的类成员 称为 类的静态成员 ,用 static 修饰的 成员变量 ,称之为 静态成员变量 ;用 static 修饰 的 成员函数 ,称之为 静态成员函数 。 静态成员变量一定要在类外进行初始化   静态成员 为 所有类对象所共享 ,不属于某个具体的对象,存放在静态区   静态成

    2024年02月04日
    浏览(38)
  • Android Studio:Intent与组件通信实现页面跳转功能

    📌Android Studio 专栏正在持续更新中,案例的原理图解析、各种模块分析💖这里都有哦,同时也欢迎大家订阅专栏,获取更多详细信息哦✊✊✊ ✨个人主页:零小唬的博客主页 🥂欢迎大家 👍点赞 📨评论 🔔收藏 ✨作者简介:20级计算机专业学生一枚,来自宁夏,可能会去

    2024年02月05日
    浏览(44)
  • Java核心知识点1-java和c++区别、隐式和显示类型转换

    java和c++区别 java通过虚拟机实现跨平台特性,但c++依赖于特定的平台。 java没有指针,它的引用可以理解为安全指针,而c++和c一样具有指针。 java支持自动垃圾回收,而c++需要手动回收。 java不支持多重继承,只能通过实现多个接口来达到相同目的,而c++支持多继承。  隐式(

    2024年02月03日
    浏览(35)
  • Flutter 动画(显式动画、隐式动画、Hero动画、页面转场动画、交错动画)

    当前案例 Flutter SDK版本: 3.13.2 Tween({this.begin,this.end})  两个构造参数,分别是  开始值 和 结束值 ,根据这两个值,提供了控制动画的方法,以下是常用的; controller.forward()   :   向前,执行 begin 到 end 的动画,执行结束后,处于end状态; controller.reverse()   :   反向,当动画

    2024年02月20日
    浏览(39)
  • Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待

    目录 1. 窗口最大化 2.单选框操作 3. 复选框操作 4. 下拉列表 5. selenium 三种等待 6. 键盘操作 7.截屏 8.断言 9. Selenium操作JS弹窗控件 10.鼠标悬停与释放 (1) 强制等待    常用于调试 (2) 隐式等待   简介:      a 、 driver.implicitly_wait(10),隐式等待设置了一个时间,在一段时

    2024年02月03日
    浏览(51)
  • web自动化之基础内容二(全网最详细,selenium获取断言信息,显示等待和隐式等待,xpath高级语法)-第二天

    获取到的断言信息就是实际结果 预期结果使我们确定的,直接写在代码中的 而实际结果是无法确定的,所以需要用一些方法去获取 代码示例 场景:当我们加载页面的时候,一些元素是需要时间的 就有可能发生,代码执行到了,而元素没有被加载出来 此时就会出现找不到元

    2024年01月17日
    浏览(32)
  • AutoSAR配置与实践(深入篇)7.5 NVM架构、存储形式及隐式显式同步

    -返回总目录- NvM 处于BSW中的Service层,具体的Memory Service协议栈分层如下 Memory Service(NvM) Memory Hardware Abstraction(Memory If和Fee/Ea) Memory Driver(Fls/Eep驱动) NvM模块与其他模块主要交互业务简介: 模块简介: NVM: 全称NVRAM Manager ,存储服务管理模块。主要提供抽象数据存储,在上

    2024年02月09日
    浏览(37)
  • Android页面跳转(Intent)

    布局 代码 隐式意图 没有明确指定组件名的Intent为隐式意图,系统会根据隐式意图中设置的动作(action)、类别(category)、数据UIL等来匹配最合适的组件。 首先在清单文件中使用意图过滤器设置活动的名字 action android:name=“HomeActivity” / category android:name=“android.intent.categ

    2023年04月09日
    浏览(28)
  • android使用相机 intent.resolveActivity returns null

    笔者使用java进行android开发,启动相机时 intent.resolveActivity returns null 笔者使用如下代码启动相机 控制台报错: 步骤1、 在packageappsrcmainAndroidManifest.xml中配置如下内容: 具体操作如下图所示: 具体代码: 问题产生的原因是在Android 11及更高版本中,由于引入了更严格的权限

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包