georgehuan1994 / DingDing-Automatic-Clock-in

钉钉全自动打卡脚本,基于auto.js,免root,适用于蓝牙考勤机
843 stars 221 forks source link

FLAG_ACTIVITY_NEW_TASK #9

Closed mmuuyyuu closed 2 years ago

mmuuyyuu commented 3 years ago

Wrapped android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 我在运行事件监听的时候遇到这样一个错误,怎么处理?

georgehuan1994 commented 3 years ago

是startActivity()的报错,这是一个内部的Intent,只在钉钉内才能使用,所以要确保钉钉启动之后,再调用 attendKaoqin()

georgehuan1994 commented 3 years ago

如果要在任意活动界面,拉起钉钉的考勤界面,可以在intent中加一个flags数组参数 flags: [Intent.FLAG_ACTIVITY_NEW_TASK]

/**
 * @description 使用 URL Scheme 进入考勤界面
 */
function attendKaoqin(){

    var url_scheme = "dingtalk://dingtalkclient/page/link?url=https://attend.dingtalk.com/attend/index.html"

    if(CORP_ID != "") {
        url_scheme = url_scheme + "?corpId=" + CORP_ID
    }

    var a = app.intent({
        action: "VIEW",
        data: url_scheme,
        flags: [Intent.FLAG_ACTIVITY_NEW_TASK]
    });

    app.startActivity(a);

    console.info("正在进入考勤打卡页面...")
    sleep(6000)

    if (null != textMatches("申请").clickable(true).findOne(3000)) {
        console.log("已进入考勤打卡页面")
        sleep(1000)
    }
}
mmuuyyuu commented 3 years ago

不好意思,没描述清楚。 我把脚本导入Autojs这个app,然后点击运行。就报这个错了。 问题是监听那一块,如果我把监听那一块代码注释掉,直接运行一个其他的函数是没问题的。 不知道是不是我哪里有错误的操作。

georgehuan1994 commented 3 years ago

通知监听依赖于通知服务,如果通知服务没有运行,会抛出异常并跳转到通知权限开启界面。(有时即使通知权限已经开启通知服务也没有运行,这时需要关闭权限再重新开启一次) 另外把完整的报错发一下吧。

mmuuyyuu commented 3 years ago

image

我已经删掉了别的代码,只剩下这个监听事件。

georgehuan1994 commented 3 years ago

看下设置里,AutoJs的通知权限,是“允许通知”吗?

mmuuyyuu commented 3 years ago

已经是设置的允许通知

georgehuan1994 commented 3 years ago

image 在AutoJs里侧拉出菜单,看下这两个选项打开没有

mmuuyyuu commented 3 years ago

额,我打不开图片。可以用文字描述是哪2个选项吗?我这边只打开‘无障碍服务’。 另外,我刚刚测试了其他通知,似乎只有‘通知监听’是报错,其他的监听没有问题。

georgehuan1994 commented 3 years ago

菜单里的 读取通知权限、前台服务

mmuuyyuu commented 3 years ago

解决了,是这个问题。谢谢,麻烦了

zy410692 commented 3 years ago

多谢,跟我的问题一样,就是读取通知的权限.