吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2633|回复: 2
收起左侧

[会员申请] 申请会员ID:三年千夜

[复制链接]
吾爱游客  发表于 2017-10-26 18:32
1.申请ID:三年千夜
2.个人邮箱:l_user@163.com
3.原创文章:本人是安卓开发,之前一直是个游客在吾爱看看资料,看看教程。最近才发现会员跟游客有那么大的差别,所以想试着申请一下会员。

        以前看到别人微信朋友圈发送各种有趣视频,点赞无数,自己也想发一下然而又没有资源。偶然在网上发现了朋友圈转发他人视频的教程,教程步骤比较繁琐。作为一枚程序猿,做事情都要追求省事,于是根据教程,写了一个app。app的主要功能就是转发别人的朋友圈视频,操作简单。下面贴上核心代码,详细的解释一下原理:
       1.其实核心的步骤就是监听微信文件夹,获取保存的朋友圈视频路径,自己发送朋友圈视频的时候,替换掉视频名字。这样就达到了发送别人朋友圈视频的目的。
       2.android中有个FileObserver类,它的作用是一个用于监听文件访问、创建、修改、删除、移动等操作的监听器,基于linux的inotify。 通过它我们就可以实现监听视频的创建。代码如下:
          继承FileObserver之后,重写onEvent
         @Override
        public void onEvent(int event, String path) {
                // TODO Auto-generated method stub
                switch(event) {      
                        case FileObserver.ALL_EVENTS:      
                        break;      
                        case FileObserver.CREATE:      
                        if (path.endsWith(".mp4")) {
                                Log.e("Create", "path:"+path);
                                if (SPutil.get(context, "wxpath", "").toString() != null) {
                                        if (path.startsWith("tempvideo")) {//自己录制的视频
                                                //得到转发的文件路径
                                                File oldFile = new File(SPutil.get(context, "wxpath", "").toString()+"/"+path);
                                                if (name != null) {
                                                        //得到自己录制的文件路径
                                                        File newFile = new File(SPutil.get(context, "wxpath", "").toString()+"/"+name);
                                                        if (newFile.exists()) {
                                                                oldFile.delete();//删除朋友圈视频
                                                                newFile.renameTo(oldFile);//重命名自己的视频
                                                                name = null;
                                                        }
                                                }
                                        }else {//转发的视频
                                                File file = new File(SPutil.get(context, "wxpath", "").toString()+"/"+path);
                                                if (file.exists()) {
                                                        name = path;
                                                }
                                        }
                                }
                        }
                        break;  
                        case FileObserver.DELETE:
                                if (path.endsWith(".mp4")) {
                                }
                                break;
                }     
        }
       通过删除朋友圈视频,重命名自己的视频,这样达到替换文件的目的。
     3.FileObserver需要一直保持一个引用来防止被java的GC干掉,于是我们需要创建一个service,在service中绑定使用。通过观察微信目录得知,登录了微信之后会在根目录“/tencent/MicroMsg/“中生成一个随机文件夹,保存当前用户的各种数据。因为随机文件夹的名字非常长,所以我们可以遍历          MicroMsg文件夹,得到最长文件夹的路径,进而进行监听。代码如下:
       @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
                Log.e(TAG, "服务被启动");
                File file = new File(Environment.getExternalStorageDirectory().getPath()+"/tencent/MicroMsg/");
                path = getAllFiles(file)+"/video";
                SPutil.put(this, "wxpath", path);
                if (mListner == null) {
                        mListner = new SDCardListener(FileService.this,path);
                        mListner.startWatching();
                        Log.e(TAG, "开启监听");
                        mNotificationManager.notify(100, mNotification);
                }
                return START_STICKY;
        }


      /**
         *遍历指定的文件夹
         *并且计算此文件夹下最长的文件夹名称
         */
        private String getAllFiles(File root) {
                String longFile = null;
                File files[] = root.listFiles();
                ArrayList<String> list = new ArrayList<String>();
                if (files != null) {
                        for (File f : files) {
                                if (f.isDirectory()) {//表示这是一个目录
                                        getAllFiles(f);
                                        list.add(f.toString());
//                                        Log.e(TAG, "文件夹:"+f);
                                } else {//表示这是一个文件
//                                        Log.e(TAG, "文件夹:"+f);
                                }
                        }
                }
                String str = "1";
                for (int i = 0; i < list.size(); i++) {
                        if (list.get(i).length() > str.length()) {
                                str = list.get(i);
                        }
                }
                if (!"1".equals(str)) {
                        longFile = str;
                }
                return longFile;
        }
     然而此方法有一个问题,多个用户登录之后会生成多个随机文件夹。我的思路是获取MicroMsg文件夹下所有长名称的文件夹,然后判断它们的最后修改时间,获取最接近当前时间的文件夹路径。
    4.我们可以在activity中设置一个开关。启动或者停止service,这样就可以想转发就转发,不想转发的时候正常操作。
    基本原理就是上面说的,排版上可能不太友好,希望能通过。


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2017-10-27 11:08
文章有些简单,还不足以达到申请要求,可以跟帖补发更多进一步分析来申请,或者你可以关注论坛微信,双十一会开放注册,今天晚些时候会发公告。
netCheney 发表于 2017-10-27 23:27
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-19 01:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表