autojs免root脚本引擎编写的本地音乐播放器源代码开源

说明

本文提供的代码仅供参考。不建议用于生产环境。
可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。

Auto.js简介

Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。
与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。

Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。

开发文档

Auto.js Pro开发文档
文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。

为什么要使用Auto.js Pro开发脚本,有什么特点?

吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:

  • Auto.js Pro能开发免ROOT的安卓脚本
  • Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型
  • Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面
  • Auto.js Pro使用的javascript的语法比较优雅,代码可读性强
  • Auto.js Pro的命令库非常的丰富,接口比较多
  • Auto.js Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告

推荐教程

Auto.js Pro安卓全分辨率免ROOT引流脚本开发视频教程(HD超清1080p)

示例代码

"ui";

//主题颜色
var color = "#fffb7299";
//设置顶部通知栏颜色
ui.statusBarColor(color)
;
//此代码由飞云脚本圈整理提供(www.feiyunjs.com)
//音乐文件的后缀名
var musicExts = [".mp3", ".wma", ".rm", ".wav", ".mid", ".ape", ".flac"];
//扫描路径
var path = "/sdcard/netease/cloudmusic/Music";
//保存音乐文件列表的数组
var musicFiles = [];

ui.layout(
    <drawer id="drawer" bg="file:///sdcard/脚本/PicsArt32.jpg">
        
        
        <vertical>
            <frame>
                <button id="button_cd" h="30" w="45" text="〓" bg="?selectableItemBackground"  textSize="18sp" padding="5" layout_gravity="center|left" textColor="#ffffff"  />
                <text text="Music1.0" h="30"   textStyle="bold" gravity="center"  bg={color} textSize="18sp" textColor="#ffffff"/>
                <button id="button_sz" h="30" w="45" text="#" bg="?selectableItemBackground"  textSize="18sp" padding="5" layout_gravity="center|right" textColor="#ffffff"  />
            </frame>
            
            <frame layout_weight="1" >
                //播放页面
                <vertical id="bfym" visibility="invisible" bg="#33000000" margin="0" layout_weight="1" >
                    <frame>
                        <input id="input_ss"  layout_gravity="center" bg="#80ffffff"  h="30" w="*" margin="0"  padding="0 60 0 15" textColorHint="#99363636" textSize="13sp" hint="搜索网络歌曲" singleLine="true" textColor="#99363636" />
                        <button id="button_ss" text="搜索" bg="?selectableItemBackground"  textSize="13sp" padding="5" layout_gravity="center|right" textColor="#99363636" h="30" w="50"  />
                    </frame>
                    
                    <text h="450" w="*" gravity="center" bg="#ffffff" text="歌词" />
                    <progressbar id="jdt1"  w="*" progress="20" max="100"  style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"/>
                    
                    
                </vertical>
                
                //列表页面
                <list id="files"  visibility="visible"  layout_weight="1"  >
                    <vertical w="*">
                        //列表中间的边框,我自己想的笨方法
                        <frame h="1px" w="*" bg="#1affffff">
                        </frame>
                        <horizontal h="40" layout_weight="1" bg="?selectableItemBackground">
                            
                            <text id="sy" h="20" w="35" gravity="center" layout_gravity="center" margin="5" textSize="13sp" textColor="#ffffff" text="{{this.sy}}"  maxLines="1"  ellipsize="end"/>
                            <text id="name" w="*" gravity="left|center" layout_gravity="center" margin="0 20 0 0" h="20" textSize="13sp" textColor="#ffffff" text="{{this.name}}" maxLines="1"  ellipsize="end"/>
                            
                        </horizontal>
                        <frame h="1px" w="*" bg="#1affffff">
                        </frame>
                    </vertical>
                </list>
                
                //设置页面
                <ScrollView  id="szym" visibility="invisible" >
                    <vertical>
                        
                        <text text="主题颜色" h="20" bg="#ffffff" paddingLeft="10" textSize="16sp" gravity="left|center" />
                        
                        <horizontal>
                            <button  textColor="#ffffff"  w="65" h="100"  text="主题" textSize="15sp" margin="10" />
                            <button  textColor="#ffffff"  w="65" h="100"  text="主题" textSize="15sp" margin="10" />
                            <button  textColor="#ffffff"  w="65" h="100"  text="主题" textSize="15sp" margin="10" />
                            <button  textColor="#ffffff"  w="65" h="100"  text="主题" textSize="15sp" margin="10" />
                        </horizontal>
                        
                    </vertical>
                </ScrollView>
                
            </frame>
            
            //底部状态栏
            <horizontal id="ztl" h="45" bg={color}>
                <img  id="img_tx" h="35" w="35" margin="5" borderWidth="1dp" radius="20dp" src="file:///sdcard/crop.jpg" />
                <vertical h="45" layout_weight="1">
                    <text id="text_gqm" h="20" w="*" gravity="left|center"  textStyle="bold" maxLines="1" textColor="#ffffff" text="当前状态:等待播放" margin="5 15 0 0" textSize="15sp" ellipsize="end" />
                    <text id="text_dz" h="15" w="*" gravity="left|center"  textStyle="bold" maxLines="1" textColor="#ffffff" text="当前状态:等待播放" margin="0 15 0 0" textSize="10sp" ellipsize="end" />
                </vertical>
            </horizontal>
            
        </vertical>
        
        
        
        
        //侧边栏
        <vertical layout_gravity="left" bg="#ffffff" w="250">
            
            <list id="menu" layout_weight="1">
                <horizontal bg="?selectableItemBackground" w="*">
                    <img w="50" h="50" padding="16" src="{{this.icon}}" tint="{{color}}"/>
                    <text textColor="black" textSize="15sp" text="{{this.title}}" layout_gravity="center"/>
                </horizontal>
            </list>
        </vertical>
        
    </drawer>
)

//底部状态栏头像测试播放下一首
var is = 0
ui.ztl.click(() => {
    toast(is + "  " + musicFiles.length)

    if (is == musicFiles.length - 1) {
        is = 0
        toast("is=0")
    }

    is++
    toast(is)
    media.playMusic(musicFiles[is].path)
})


ui.files.on("item_click", function(item, pos) {
    media.playMusic(item.path, 1);
    is = pos
    toast(pos)
    ui.text_gqm.setText(files.getNameWithoutExtension(item.path))
    ui.text_dz.setText(String("正在播放第" + (pos + 1) + "首 ") + " 当前文件夹:" + path)
})



var sy = 0
ui.files.setDataSource(musicFiles);
//启动线程来扫描音乐文件
var sm = threads.start(function() {
    listMuiscFiles(path, musicFiles);
})
sm.join()
ui.text_gqm.setText("当前路径找到" + sy + "首歌")
ui.text_dz.setText("当前文件夹:" + path)

function listMuiscFiles(dir, list) {
    sy = 0
    //遍历该文件夹的文件
    files.listDir(dir).forEach(fileName => {
        var path = files.join(dir, fileName);
        //如果是子文件夹则继续扫描子文件夹的文件
        if (files.isDir(path)) {
            listMuiscFiles(path, list);
            return;
        }

        for (var i = 0; i < musicExts.length; i++) {
            //如果文件名的后缀是音乐格式
            if (fileName.endsWith(musicExts[i])) {
                //则把它添加到列表中
                sy++
                list.push({
                    sy: sy,
                    name: files.getNameWithoutExtension(fileName),
                    path: path
                })
            }
        }
    })
}

ui.menu.setDataSource([{
        title: "本地音乐",
        icon: "@drawable/ic_android_black_48dp"
    },
    {
        title: "播放页面",
        icon: "@drawable/ic_favorite_black_48dp"
    },
    {
        title: "设置",
        icon: "@drawable/ic_settings_black_48dp"
    },
    {
        title: "退出",
        icon: "@drawable/ic_exit_to_app_black_48dp"
    }
])

ui.menu.on("item_click", item => {
    switch (item.title) {
        case "本地音乐":
            ui.drawer.closeDrawers();
            ui.files.visibility = 0
            ui.bfym.visibility = 4
            ui.szym.visibility = 4
            break;

        case "播放页面":
            ui.drawer.closeDrawers();
            ui.files.visibility = 4
            ui.bfym.visibility = 0
            ui.szym.visibility = 4
            break;

        case "设置":
            ui.drawer.closeDrawers();
            ui.files.visibility = 4
            ui.bfym.visibility = 4
            ui.szym.visibility = 0
            break;

        case "退出":
            ui.drawer.closeDrawers();
            toast("退出")
            ui.finish();
            break;
    }
})
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值