受群友邀请 写一下如何查找这些所谓的意图
可以用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知识的话会更容易理解 我希望看到你们能把试出的功能发到贴吧的帖子上 让其他人也能用上这个意图 大家共同进步