Android activity 隐式跳转

🎯 隐式跳转 = 给 Android 发一张"任务说明书"

任务说明书里面有三样东西:

  • Action(动作) ------ 我要干什么

  • Data(数据内容) ------ 我要对什么干

  • Category(类别提示) ------ 有什么特殊要求

Android 会根据这三条信息,去找能处理这个任务的 Activity。

🌟1. Action ------ "你要干什么事?"

可以类比成:动词

Action 现实含义
VIEW 我想"看"点东西
SEND 我想"分享"东西
DIAL 我想"打电话"
EDIT 我想"编辑内容"
自定义 Action 我想执行某个自家 App 的操作
java 复制代码
new Intent(Intent.ACTION_VIEW);

意思就是:

"我要看点东西!"

这个东西是什么?需要靠 Data 来说明。

🌟 2. Data ------ "你要处理的是什么东西?"

可以类比成:名词

例如:

Data 表示的东西
https://baidu.com 一个网页
tel:10086 一个电话号码
geo:0,0?q=北京 一个地理位置
image/* 一张图片
video/* 一个视频文件

举例:

intent.setData(Uri.parse("https://www.baidu.com"));

就是告诉系统:

我要看(VIEW)一个网页(Data)。

于是系统就会找浏览器来处理。

🌟 3. Category ------ "补充说明"

可以类比成:备注信息

比如常见的:

Category 说明
DEFAULT 普通的、常规的启动方式
BROWSABLE 可以从浏览器里打开
LAUNCHER 要显示在桌面上

最最重要的是:

📌 如果你要使用隐式跳转,目标 Activity 的 intent-filter 必须包含 DEFAULT

<category android:name="android.intent.category.DEFAULT"/>

没有这个就无法启动(超级常见的坑)。

🎁 用一个生活例子把三者串起来(最通俗)

假设你是 Android,你收到一张任务说明书:


📄 任务说明书:

  • Action:VIEW(我想"看")

  • **Data:https://baidu.com**(我要"看网页")

  • Category:DEFAULT(普通方式打开即可)


你(Android)会怎么做?

→ 去找所有能 看网页 的应用

→ 找到 Chrome、浏览器、Edge、QQ 浏览器

→ 如果用户设置过默认浏览器,就直接打开

→ 没设置就弹一个"选择应用"窗口让用户选

测试代码:

java 复制代码
package com.example.phonecall;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnDial = findViewById(R.id.btn_dial);

        btnDial.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 创建隐式意图
                Intent intent = new Intent(Intent.ACTION_DIAL);

                // 设置电话号码,tel:xxx 是 Data
                intent.setData(Uri.parse("tel:10086"));

                // 启动拨号界面
                startActivity(intent);
            }
        });
    }
}
XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp">

    <Button
        android:id="@+id/btn_dial"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开拨号界面(ACTION_DIAL)"/>

</LinearLayout>
相关推荐
千里马学框架21 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台21 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone21 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui