Android Studio 编写无限查看QQ闪照APP

原理

  QQ闪照在查看了之后就会立即删除,但是在查看之前,它会保存在你的手机里,它在你手机里的路径是:
        “内部储存/tencent/MobileQQ/diskcache”
  如果你直接在这个路径里查看QQ闪照也是可以的,而且你可以把文件复制出去,这样就可以永久查看了。

直接手动查看闪照

  你的好友给你发了一张闪照:
      
  记住,成功的关键在于:点开了闪照(不要点那5秒),然后到文件夹里按时间降序查看文件。这样第一个文件就一定会是闪照的图片(闪照图片结尾是:_fp)。点开闪照后腾讯的算法会自己把闪照文件解密,然后保存到那个文件夹里,所以它按时间降序查看文件时第一个文件一定会是那个刚刚点开的闪照图片。

代码实现

  用刚刚的方法可以这么轻松地破解闪照,你是不是对用代码实现很失望呢?一开始我也是这么觉得的,但是弄了一段时间后发现手动操作非常不方便,每次都要自己打开文件夹,还有设置按时间降序查看,还要选择打开方式,非常麻烦。

1、开权限

  和windows不一样,android文件操作都是要开启储存权限的,否则文件操作时会抛出异常。
  开启权限对初学者来说不是很简单,网上有很多方法,但是有很多方法都太复杂,像我这样的小白根本不会弄。
  下面是一个非常简单的开启权限的方法(以储存权限为例):
  首先在 AndroidManifest.xml 文件里的 </application> 和 </manifest> 之间添加如下代码:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  这个表示在应用信息里会显示该应用会需要储存权限。但是 Android 6.0 以及之后的版本中,单单这样是不能够开启储存权限的,还需要再写一个能够弹出一个消息框,告诉使用者需要开启储存权限的代码,只有使用者点击同意后储存权限才真正的开启了。
  废话不多说,直接说方法:首先在 build.gradle (Module: app) 的 dependencies 里添加一行代码:

compile 'com.github.dfqin:grantor:2.1.0'

  添加了之后建议先 Rebuild Project 一下(菜单栏/Build/Rebuild/Project)
  然后在 MainActivity 里添加一个方法:

private void requestStore(){if(!PermissionsUtil.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){PermissionsUtil.requestPermission(this, new PermissionListener() {@Overridepublic void permissionGranted(@NonNull String[] permission) {init();   //要自己定义的一个方法init(),用于初始化}@Overridepublic void permissionDenied(@NonNull String[] permission) {}},new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE});}else{init(); //要自己定义的一个方法init(),用于初始化}
}

  调用后这个方法如果应用未拥有储存权限就会弹出一个消息框,提示使用者是否给应用开启储存权限,使用者给了应用储存权限后就调用方法 init();如果应用已拥有储存权限,就直接调用方法 init()。
  要写一 init() 方法,初始化就不写在 onCreate 里了。onCreate 里只需要写:

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);requestStore();
}

  这样应用申请完储存权限后就会开始初始化,初始化里可以绑定按钮、图片框等。

2、按照时间降序查看文件

  你没有被一个简单的开启权限难倒吧?我们开启权限的目的是要读取文件中的闪照。首先要写一个可以按照时间降序查看文件的方法:

public static List<File> getFileSort(String path) {List<File> list = getFiles(path, new ArrayList<File>());if (list != null && list.size() > 0) {Collections.sort(list, new Comparator<File>() {public int compare(File file, File newFile) {if (file.lastModified() < newFile.lastModified()) {return 1;} else if (file.lastModified() == newFile.lastModified()) {return 0;} else {return -1;}}});}return list;
}
public static List<File> getFiles(String realpath, List<File> files) {File realFile = new File(realpath);if (realFile.isDirectory()) {File[] subfiles = realFile.listFiles();for (File file : subfiles) {if (file.isDirectory()) {getFiles(file.getAbsolutePath(), files);} else {files.add(file);}}}return files;
}

  这个代码是用 Java 的 File 读入所有文件信息,再用 Collections 给这些文件按照时间降序排序。写好这个代码后调用方法 getFileSort(路径) 就可以获得 路径 里的所有文件并且是按时间降序得到排列的。
  则获取闪照图片的关键代码是:

String folderPath = Environment.getExternalStorageDirectory() + File.separator;    //获取 内部储存 路径
String path = folderPath+"tencent/MobileQQ/diskcache";                          //QQ闪照保存路径
files = getFileSort(path);                     //一个 List<File> 类型的全局变量
if(files.size() > 0) {                           //防止无文件导致 ffiles.get(0) 异常String pathName = files.get(0).getPath();Bitmap bitmap = BitmapFactory.decodeFile(pathName);imageView.setImageBitmap(bitmap);           //imageView是布局里的图片框
}

  当然使用方法和之前手动查看的方法一样,必须要先点开闪照(不要点那5秒),然后再获取。

3、把获取到的闪照发回给好友

  能无限查看闪照已经够秀的了,但是还可以更秀,就是查看了闪照之后直接分享给刚刚发给你闪照的好友。
  先上代码:

private void shareImageQq() {new Thread(new Runnable() {@Overridepublic void run() {try {Intent intent = new Intent();ComponentName comp;comp = new ComponentName("com.tencent.mobileqq", "com.tencent.mobileqq.activity.JumpActivity");intent.setComponent(comp);intent.setAction(Intent.ACTION_SEND);intent.setType("image/*");Uri uri = Uri.fromFile(files.get(0)); //files.get(0) 就是刚刚的图片文件intent.putExtra(Intent.EXTRA_STREAM, uri);startActivity(intent);}catch (Exception e){e.printStackTrace();}}}).start();
}

  直接用系统调用QQ的分享功能,把刚刚的图片分享给好友。“com.tencent.mobileqq” 是手机QQ的包名,“com.tencent.mobileqq.activity.JumpActivity” 是手机QQ分享功能类的类名。

4、可以用来耍了

  先看看效果:
      
  大概就这样了吧。

Android Studio 编写无限查看QQ闪照APP相关推荐

  1. Android Studio编写运行测试纯java代码可带main()函数

    问题 小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确.刚开始的时候我是在页面上写一个Button,添加点 ...

  2. 在Android Studio编写代码时,使用MaterialCardView的项目无法正常运行怎么办?简简单单搞定它_莫韵乐与bug的奇妙冒险

    在Android Studio编写代码时,使用MaterialCardView布局的项目闪退怎么办?简简单单搞定它 当我想用MaterialCardView去做一个好看的界面的时候,应用居然闪退了 经 ...

  3. android 查看文件系统的格式,Android studio 3.0 查看手机文件系统的方法(超简单)

    众所周知,我们要查看安卓手机中文件系统前提条件是要root手机,然后去DDMS里面去看,但是现在很多手机都不好root,替代的方法是用电脑模拟器,不管怎么样,都挺麻烦的,最近更新Android stu ...

  4. android sutdio版本号,电脑中Android studio版本号如何查看_电脑中查看Android studio版本号的步骤-系统城...

    Android studio是谷歌推出的一个Android集成开发工具,在使用的时候,经常会有新版本不断产生所以就需要查看自己的Android studio版本号来确保是否需要进行更新,很多用户不知道 ...

  5. Android Studio - HPROF文件查看和分析工具

    Android Studio - HPROF文件查看和分析工具 Android Studio 翻译的官方文章 原文链接 当你在Android Studio中使用Android Monitor里的Mem ...

  6. 使用Android Studio编写一个简单的音乐盒

    文章目录 一.知识要点 二.xml代码 activity_main.xml 三.java代码 MainActivity.java MusicService.java 四.运行界面展示 五. 源码Git ...

  7. Android Studio编写java工程并生成可执行jar

    Android Studio编写java工程并生成可执行jar 1.新建一个空的Android工程 2.新建一个java module 3.添加main方法 4.引用三方jar 5.打包输出为可执行j ...

  8. [Java] 使用Android Studio编写Java测试代码

    目录 一.创建"Java or Kotlin Library" 模组. 1.1 新建Android Project. 1.2 新建 "Java or Kotlin Lib ...

  9. 用Android Studio 编写简易计算器

    用Android Studio 编写简易计算器 界面设计 功能的實現 其他配置 1.頂部標題 2.修改測試 这是用Android Studio编写的 简易计算器 .功能主要是实现简单的加减操作,以及比 ...

最新文章

  1. 如何让python图案旋转_python实现旋转和水平翻转的方法
  2. Just for fun——写个爬虫抓取whois信息
  3. 【渝粤题库】陕西师范大学151205 财务管理原理作业(笔试题型)
  4. 第7节 三个败家子(7)——收藏IQ也会贬值
  5. java 线程安全问题_java线程安全问题原因及解决办法
  6. php 常用函数 180,php 部分常用函数
  7. catia知识工程_【开团】CATIA超全直播课程&实例讲解!
  8. Spring Cloud构建微服务架构—创建“服务注册中心”
  9. python爬虫︱百度百科的requests请求、百度URL格式、网页保存、爬虫模块
  10. mysql数据签名功能_分析型数据库 MySQL的签名机制有哪些? -问答-阿里云开发者社区-阿里云...
  11. css基础--正文颜色和背景
  12. CE的EMC测试(EN55022-EN55024-EN55014)-转载
  13. Cisco Packet Tracer思科模拟器中无线网络的基本配置
  14. 数据处理与分析|涵盖七大分析方法
  15. web前后端分离系统之间的单点登录
  16. 【转载】校园网络客户端连网常见问题
  17. thrift+springBoot
  18. You are using pip version 21.2.4; however, version 22.0.4 is available.
  19. 第四十一章 SQL命令 DROP VIEW
  20. Excel表格×××号码如何一键提取性别、年龄、出生年月

热门文章

  1. 商业大亨微信草花服务器,《商业大亨》富豪上阵斥资亿万抢油田
  2. python 期货交易接口_量化交易 – 期货CTP接口与程序化(量化交易)的对接 1
  3. 杰理之手表UI页面大纲【篇】
  4. 使用从create-react-app创建项目后,运行npm run eject报错解决方法
  5. 贵州省大力推进政务电子云平台建设 打造政务服务“贵州模式”
  6. vue-cli3.0中Tslint配置
  7. TTF字体库裁剪TTC转TTF字体工具
  8. spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener
  9. 关闭所有oracle服务,启动/关闭oracle服务有三种方式
  10. Android 闹钟选择铃声,怎么设置闹钟铃声为自己喜欢的音乐