分享

查找意图

 温柔一哮 2017-03-21

受群友邀请 写一下如何查找这些所谓的意图

可以用tasker的发送意图进行操作

每一个app 都一定会有一个androidmanifest.xml文件
把apk后缀换成zip解压就可以看见

不过呢 看起来是乱码的 例如这样


这是因为app都会混淆的

一般要反编译 市面上有很多反编译的软件 我就不一一细说了
不过由于我们是找意图 所以可以不用反编译

利用android上的root explorer(re)文件浏览器就可以(这也是一大神器)

打开re 点击你想要找意图的apk文件 re弹出对话框 点击查看 就可以帮你打开apk里面的内容

点击里面的androidmanifest.xml文件 打开就不乱码了


你可以复制里面的代码 黏贴到pc的文本编辑器 例如notepad++之类的 打开会好看很多

今天的例子比较简单 我找了"讯飞语音+"这个apk

经过一番复制黏贴后 我们得到了讯飞的androidmanifest内容


接下来 我们只需要关注几个关键字

"<intent-filter>**</intent-filter>"

这个intent-filter意思为 意图过滤器 可以简单理解为字符串匹配器

里面都是一些开发者自定义的规则

首先 找到</intent-filter>之后我们有几个地方要关注的


第一个是Activity 如果如上所示 intent-filter被一个Activity包裹着
这个Activity一般理解为界面 就是你打开app之后能看见东西 具体是什么我们先不管

这个Activity表明如果我们在tasker用的话需要

在-发送意图-目标栏: 选择Activity

同样的道理

如果intent-filter被<Service 包裹

我们就要在目标栏选择Service如果被receiver包裹 就要选择Broadcast receiver

这样我们的意图才能正确工作

这里要说一下 通常Service对我们用户来说没什么用 我们一般关注Activity 和receiver这两个比较有用

还是如上图 一个Activity里面可以有多个"<intent-filter>**</intent-filter>" 意思是这个Activity只要和里面其中一条"<intent-filter>**</intent-filter>"里面的规则相同就可以打开这个Activity

一般"<intent-filter>**</intent-filter>"里面的内容会包含几个关键字 我们来认识一下

"<action name"这个关键字 后面跟了一串字符串 这个字符串非常关键,

用来填入tasker发送意图界面的操作栏

"<category name="
这个关键字后面跟了一串字符串 也是非常关键 一般来说 会有这个字符串"android.intent.category.DEFAULT"

没有这个字符串的话 这个Activity / receiver都不能用于tasker!!!

另外如果一个"<intent-filter>**</intent-filter>"
里面有多个
"<category name="

必须在tasker的猫栏(照例吐槽 cat栏 意为约束)有多少个就写多少个
不过tasker图形界面的限制是两个 应该可以有其他方法加多几个.....

目前我的做法是 如果这个"<intent-filter>**</intent-filter>"
里面的category太多 tasker写不完的话 选择其他少一点category的
"<intent-filter>**</intent-filter>"

,当然 有一些Activity的"<intent-filter>**</intent-filter>" 可能只有1个或者很少 而且里面都非常多category .
..我就没什么办法了 不过一般来说没有那么变态的Activity会用到那么多category"

<data"这个关键字比较复杂 如果你看见Activity用到了这个关键字 并且你很想要要触发这个Activity的话 就搜索关键字"intent-filter的匹配规则" 很多blog写的比较详细

比如我推荐一个 http://blog.csdn.net/iispring/article/details/48481793

一般很少Activity会用到<data标签
但是也有可能有的 例如这个


这里有几个关键字如果intent-filter里面有
"category name="android.intent.category.LAUNCHER"

就表示这个Activity是入口Activity 也就是说你在桌面点击app图标 看见第一个界面就是这个Activity了

如果我要用tasker启动这个Activity 一般先看看有没有好用的intent-filter
上图里面 第一个intent-filter最多规则 又有action 又有category 又有data

第二个intent-filter规则比较少 可以用第二个,不过第二个是给桌面用的 如果我们要用第二个intent-filter 需要在tasker 发送意图的包名栏输入讯飞语音+的包名

包名在androidmanifest的第一行就可以看见


如果没有那么多intent-filter可以选择

比如只有第一个intent-filter的话 tasker必须要这样写
操作栏 android.intent.action.VIEW

猫栏 选DEFAULT
数据栏 speech://123.com
(补充一下 数据栏这样写是因为这个intent-filter有这个标签

<data scheme="speechcloud"></data>

数据栏输入的数据叫URL格式 例如你浏览的这个网址 就是标准的URL格式

http://tieba.baidu.com/f?kw=tasker&ie=utf-8&tp=0#

data中的scheme意思为框架 上面这个网址的框架就是http

data中这样声明标签 意味着我们的意图要包含一个URL开头框架是"speechcloud"

后面怎么样就随意了 所以我们在数据栏中写
"speech://123.com"
也可以这样写
"speech://123"
或者这样
"speech://fuck"
另外如果data里面有"android:host"关键字的话

例如<data android:scheme="abc" android:host="tieba.baidu.com" />

就要输入abc://tieba.baidu.com或者abc://tieba.baidu.com/bbcasdwqsdq

都可以 如果有更多URL属性指明就要有多少属性 就输入多少 这个涉及到android基础 百度google"android URL"就有资料可以看了)

目标栏 Activity




运行!!!!!


成功启动

按照上面的思路 我们找找别的


这个Activity的名字挺有趣的 就试试第一组intent-filter吧

第一组的action比较大众化 可能有很多个程序都注册了这action
非常简单

操作栏 android.intent.action.SEARCH_LONG_PRESS
猫栏DEFAULT
目标 Activity

执行


可以看见 的确是很多app都注册了这个action

执行之后系统会叫你选择哪个app响应这个意图

这个intent-filter不是太理想 我们换第二组

操作栏 com.iflytek.speech.action.voiceinput
其余不变

执行


完成了 原来这个Activity是这样用的 发送这个意图就可以打开这个界面

最后我想说发送意图的使用限制比较多并不是每一个intent-filter你都可以找到的还有很多隐藏在代码里面 这些intent你需要反编译整个app 而且非常难读 tasker的限制也是比较多的 例如对于category 如果intent-filter声明了多个 tasker无法全部匹配也是不能触发这个意图的 而且 很多Activity你都不知道他是干嘛的 除非官方公布这个Activity 这个时候只能一个一个试尝试,或者英语比较好的话 也能望文生义 这篇文章其实属于android很基础的开发知识 并不难 而且你看完这个再去看其他intent知识的话会更容易理解 我希望看到你们能把试出的功能发到贴吧的帖子上 让其他人也能用上这个意图 大家共同进步

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多