哎,各位码农小伙伴们,今天咱们来唠个硬核又风骚的知识点——Android里的Intent对象,特别是它的“动作”(Action)。别看这词儿听着像在拍武打片,它可是你家APP能在安卓江湖里混出名堂的“社交密码”!
先想象一下:你的APP是个宅男,整天缩在自家Activity里刷手机。突然想点个外卖,咋整?扯着嗓子喊“饿死了!”?那不现实。得用Intent这个“外卖小哥”,帮你把需求(比如“我要吃饭”)精准送达“美团”APP。这里的“我要吃饭”,就是Intent的Action——说白了,就是你想干啥的宣言书。
一、Action是啥?安卓界的“社交暗号”
Action本质是个字符串(String),但可不是随便瞎写的!它像江湖黑话,系统内置了一套标准暗号,比如:
ACTION_VIEW:万能“瞅一眼”动作。搭配数据URI,能让你从“宅男”秒变“街溜子”——打开网页、看图片、地图定位,无所不瞅。ACTION_SEND:八卦之魂“分享”。看到好玩的想分(xuan)享(yao)给基友?用它!文字、图片、文件,一键群发。ACTION_DIAL:撩妹专用“打电话”。别看只是跳转拨号界面,那种“我准备call你了”的暧昧氛围拉满。ACTION_PICK:海王选妃“挑照片”。从相册里翻牌子,优雅又省力。
关键来了:Action分两种社交模式——
- 显式Intent(Explicit):像给心仪对象发微信,直接标清楚“隔壁老王,今晚八点撸串”。精准高效,但缺乏灵活性。
- 隐式Intent(Implicit):像在朋友圈嚎一嗓子“求约饭!”。谁(哪个APP)响应随缘,可能美团、饿了么都蹦出来抢单。Action在这里就是你的朋友圈文案核心!
二、隐式Intent:Android界的“海王钓鱼术”
隐式Intent的骚,在于它只描述想做什么(Action),不指定谁来做。系统自动匹配能处理的APP,像海王撒网,愿者上钩。
这里必须祭出三大匹配要素:Action(动作)、Data(数据)、Category(类别)。比如你想“查看一个网页”:
- Action设为
ACTION_VIEW(动作:查看) - Data设为网页URI:
https://m.example.com(数据:具体看啥) - 系统就会弹出浏览器、知乎、微信等所有声明能“VIEW”+“http”的APP等你翻牌。
但注意! 海王有风险,撒网需谨慎。如果没APP接盘,你的APP会直接崩(报ActivityNotFoundException)。稳妥起件,总得有个备胎:
// 先检测有没有APP能接盘
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
} else {
Toast.makeText(this, "装个浏览器吧爷!", Toast.LENGTH_SHORT).show();
}
三、实战代码:从“青铜”到“王者”的Action撩妹三部曲
案例1:直男式打电话(显式Intent)
// 直接呼叫10086(需申请CALL_PHONE权限)
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:10086"));
startActivity(callIntent);
注意:ACTION_CALL是直接打,需要权限;怂点就用ACTION_DIAL,只跳转拨号界面不自动拨打。
案例2:海王式分享(隐式Intent)
// 发一段文字+图片,能打的APP都来!
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*"); // 类型筛一波,只要能处理图片的APP
shareIntent.putExtra(Intent.EXTRA_TEXT, "快看这个段子笑死我了!");
shareIntent.putExtra(Intent.EXTRA_STREAM, uriOfImage);
// 关键:创建选择器,避免直接默认微信
Intent chooser = Intent.createChooser(shareIntent, "选个APP嘚瑟去吧");
startActivity(chooser);
效果:弹出选择框,微信、QQ、微博任君挑选,海王气质拉满。
案例3:自定义Action,让你的APP变成“社交中心”
你不仅能调用别人,还能让别的APP来调用你!在AndroidManifest.xml里声明:
<activity android:name=".MyCustomActivity">
<intent-filter>
<!-- 自定义Action名,要独特! -->
<action android:name="com.example.myapp.SHOW_ROCKET" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 限定只处理https链接 -->
<data android:scheme="https" />
</intent-filter>
</activity>
然后在代码里触发它:
// 其他APP(或自己)可以这样召唤你
Intent customIntent = new Intent("com.example.myapp.SHOW_ROCKET");
customIntent.setData(Uri.parse("https://m.example.com/launch"));
startActivity(customIntent);
从此,你的APP也能响应自定义暗号,跻身“社交名流”!
四、避坑指南:Action那些年踩过的雷
- Action名手滑打错:系统可不认识
ACTION_VEW(少了个I),直接凉凉。 - Data类型忘设:想
ACTION_SEND图片却没setType("image/*"),分享列表空空如也。 - 权限不够硬来:没申请权限就直接
ACTION_CALL,分分钟被系统拍死。 - 没做备胎检测:隐式Intent直接start,遇上用户手机没装对应APP,当场崩溃。
五、结语:学好Action,让你的APP“C位出道”
Intent的Action,就像给你的APP装上了社交牛逼症开关。掌握它,你的应用就不再是孤岛,而是安卓生态链里的“社牛达人”——能调戏其他APP,也能被万千应用争相召唤。
记住:显式Intent是专一暖男,隐式Intent是风流海王。用哪个,取决于你想当哪种“网红APP”。(当然,代码别写bug,不然只能当“搞笑博主”了)

被折叠的 条评论
为什么被折叠?



