【教程】关于意图和广播的一些使用方法

好的,先说Intent是什么

Intent

intent 通常被翻译为 意图
intent 是android中各组件之间交互的一种重要的方式,它不仅可以指明当前组件想要执行的动作,还可以在不同的应用之间传递信息.常用于启动活动,服务与发送广播...

显式与隐式intent

Intent的大部分相关物品都被auto.js所封装起来了,所以我们完全可以写出更简洁的代码,显示的intent通常用于java代码,这里我们主要说下隐式的Intent

显式

显示的intent一般用于代码中两个界面的切换,一般在java代码中进行Activity的切换.它在java中长这样子

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);

这样就构造了一个很明显的从FirstActivity 到 SecondActivity 的 一个 意图 这种就被称为显示的意图...

隐式Intent

这里的隐式是相对于显式来说的, 主要是不会明显的写出Intent所要到达的地方, 而是交予安卓系统判断,在android中有个魔法文件叫做AndroidManifest.xml,你所能看到的所有界面都在它里面有声明.在它里面可以添加对Intent的响应.在<intent-filter></intent-filter>标签中可以进行配置.

所以在教程文件中的几个intent属性都是从这里来的

此处引用教程中intent的描述

app.intent(options)

  • options <Object> 选项,包括:
    • action <string> 意图的Action,指意图要完成的动作,是一个字符串常量,比如"android.intent.action.SEND"。当action以"android.intent.action"开头时,可以省略前缀,直接用"SEND"代替。常见的action参见常用的意图动作。
    • type <string> 意图的MimeType,表示和该意图直接相关的数据的类型,表示比如"text/plain"为纯文本类型。
    • data <string> 意图的Data,表示和该意图直接相关的数据,是一个Uri, 可以是文件路径或者Url等。例如要打开一个文件, action为"android.intent.action.VIEW", data为"file:///sdcard/1.txt"。
    • category <Array> 意图的类别。比较少用。
    • packageName <string> 目标包名
    • className <string> 目标Activity或Service等组件的名称
    • extras <Object> 以键值对构成的这个Intent的Extras(额外信息)。提供该意图的其他信息,例如发送邮件时的邮件标题、邮件正文。

要做到相应/被响应意图,需要上述内容中除extras的内容都相同

action属性

它本来的样子是这样的

<intent-filter>
    <action android:name="自定义的意图名称"/>
</intent-filter>

文档已经说的比较清楚了,我这里就不赘述了.
常见的action可以查看这里的几个.

type属性

mimeType是一个在html中常用的类型,用来标识该文件的类型的.

data

是一个uri,除了打开文件,还可以指定其他协议,如geo的地理位置和tel的拨打电话.

category

附加的描述,不常用,一般默认就好

extras

Intent不仅可以表明意图,还可以携带数据,在android中是这样的intent.putExtra("数据的名称",数据)数据名称用于后面的取值.

intent就到此了,明天或者后天再补上用法以及广播

最后由 zsb514 编辑

今天更新广播

在安卓中,广播是一种重要的应用内、应用间传播数据的手段,它是安卓四大组件之一,足以见其重要性。

那么广播到底是什么呢?一开始我认为广播,一定是广播给用户看的,通知栏里面那些消息就是广播,然而并不是这样。广播是用户不可见的,是发送给应用的,应用可以决定在收到广播之后进行什么样的操作。比如:android系统启动后,会发送一条android.intent.action.BOOT_COMPLETED的广播,这样有接收到该广播的应用就可以做出反应,比如自启动。

Android四大组件:广播(Broadcast)

要想发送出的广播起作用,就得先注册一个广播接收器,要不然发出去的广播跟本不起作用

广播接收器有两种注册方法,动态注册和静态注册。动态注册就是在运行时注册一个接收广播的接收器,在应用关闭时就无法响应广播,而静态的则可在大部分时候接收广播。

Auto.js似乎并没有将注册广播接收器的代码封装起来,似乎只能靠java代码实现广播的接收。。楼主还没有用过Auto.js的java代码功能,等使用过后再把案例贴上来把

接收广播

动态广播

有些广播必须通过动态注册,如监听手机屏幕解锁开锁。

代码如下

intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.SCREEN_OFF");
registerReceiver(myBrodcast, intentFilter);  //myBroadcast为自定义的行为。

静态广播

静态广播是需要在AndroidManifest.xml文件注册的。。。Auto.js似乎不行。。

发送广播

广播的发送是被auto.js封装起来的,也可以用shell命令来发送。

发送一个广播需要一个intent,发送广播只需要一个属性,action

在action中写上你想要发送广播的名称,直接调用app.sendBroadCast()方法即可发送

如我在旅行青蛙的脚本中设置了发送广播的代码

app.sendBroadcast({
    action : "com.zsb514.broadcast.CLOVER_COLLECT_FINSH"
})

有发送就一定要有对应的接收,一般是配合tasker进行自动任务的。

打开tasker->配置文件 -> + -> 第一条件:事件 -> 系统 -> 收到的意图

广播

其中操作就是你发送广播的action,猫是在intent中说的category,更详细的描述广播,一般不使用,mime也在intent中提到了。

好了就这些了,你已经可以在Auto.js中熟练的使用广播了

最后由 zsb514 编辑

占楼更示例

应楼下仁兄要求先更一个

关于启动Activity,需要包名和类名(活动名),所以代码如下

app.startActivity({
    packageName : "com.tencent.tim",
    className : "com.tencent.mobileqq.activity.SplashActivity"
})

这是一个跳转到tim第三页面的intent代码,很简单,其中包名和活动名如下

最后由 zsb514 编辑

大神,为什么能给个可用的使用intent例子么?我怎么改,都是not activity found

此回复已被删除!
app.startActivity({
  action: "android.intent.action.VIEW",
  type: "image/png",
  data: "file:///sdcard/take.png"
});

00:08:59.504/E: Wrapped android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/take.png flg=0x10000000 } (app.js#39)
at script(app.js:39)
at script(<intent>:1)

请问楼主,怎么打开指定的QQ号名片(用于快速点赞)😬

@wuxiaofan

app.startActivity({
            action: "android.intent.action.VIEW",
            data: "mqqapi://card/show_pslcard?src_type=internal&source=sharecard&version=1&uin=好友的QQ号" ,
        });

那如何获取一个执行一个intent所需的属性值呢?比如说,我想打开tim的聊天主界面,auto.js只能看到包名跟活动名。但是聊天主界面的活动名和与好友聊天页面的活动名一样,包名也一样。那打开聊天主页面该如何写intent呢?

@高发烧 不知道qq是怎么实现的,我觉得是通过putExtra带了数据过去的,你试着搜一搜怎么把数据带过去的,它可能是通过qq号什么的放在intent里面,也可能像楼上一样在data数据中带了一个url过去..

最后由 zsb514 编辑

@卢某某 等我回去用电脑试试,这个编辑器经常崩溃

@卢某某 我复制你的代码能运行啊 没出错
你是什么版本?我是aphla40

@卢某某 这个找找开发者把,所有的关于view打开本地文件的intent都不行...可能是出了bug...

@l10352 我这边也不行,会不会是安卓版本或者是权限的事,Android8.0

@l10352【教程】关于意图和广播的一些使用方法 中说:

@卢某某 我复制你的代码能运行啊 没出错
你是什么版本?我是aphla40

最新版本啊beta3,比你的alpha还高。以前alpha40也是这样子报错的。

@zsb514【教程】关于意图和广播的一些使用方法 中说:

@卢某某 这个找找开发者把,所有的关于view打开本地文件的intent都不行...可能是出了bug...

唉,有空问问群主了。

请问怎么样指定到一个群的聊天窗口?

终于有一个Auto.js关于intent的帖子了,支持一波~:relaxed:

  • 23
    帖子
  • 8249
    浏览

与 Auto.js 的连接断开,我们正在尝试重连,请耐心等待