android4.4 中如何获取最近应用的缩略图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android4.4 中如何获取最近应用的缩略图相关的知识,希望对你有一定的参考价值。

最近有项需求是获取应用的缩略,用于在动画时显示。因此就对此块知识简要了解了一下。

在android中获取视频文件的缩略图有三种方法:
1.从媒体库中查询
新视频增加后需要SDCard重新扫描才能给新增加的文件添加缩略图,灵活性差,而且不是很稳定,适合简单应用
2. android 2.2以后使用ThumbnailUtils类获取
实现简单,但2.2以前的版本不支持
3.调用jni文件,实现MediaMetadataRetriever类

实现复杂,但比较灵活,推荐使用

那么Android 中如何获取最近应用的缩略图,这块也有现成的函数,不过都被 @hide 掉了,所以需要利用java reflect 反射才能使用

核心代码如下:
package com.example.testondraw;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import android.app.ActivityManager;
import android.graphics.Bitmap;
import android.util.Log;

/**
* 调用隐藏方法的助手类
*/public class HideExploder
static final String TAG = "HideExploder";
private final static Object refLock = new Object();

private static Method getTaskThumbnails = null;
private static Field taskThumbnailsBitmap = null;

@SuppressWarnings("rawtypes")
public static void listAllObject(String classFullName)
try
Log.i(TAG, "listAllObject classFullName: " + classFullName);
Class<?> clazz = Class.forName(classFullName);

// 反射属性字段
Field[] fields = clazz.getDeclaredFields();

// 反射方法字段
Method[] methods = clazz.getDeclaredMethods();

// 反射构造器
Constructor[] constuctors = clazz.getDeclaredConstructors();

Log.i(TAG, "FIELD========");
for (Field f : fields)
Log.i(TAG, "TYPE: " + f.getType() + " NAME: " + f.getName());


Log.i(TAG, "METHOD========");
for (Method m : methods)
Log.i(TAG, "METHOD NAME: " + m.getName());


Log.i(TAG, "CONSTUCTOR========");
for (Constructor c : constuctors)
Log.i(TAG, "NAME:" + c.getName());

Class[] clss = c.getParameterTypes();
Object o = null;

// 产生实例
try
if (clss.length == 0)
o = c.newInstance();
else if (clss.length > 0)
// TODO

Log.i(TAG, "object: " + o);
catch (Exception e)
e.printStackTrace();


catch (Exception e)
e.printStackTrace();



public static Bitmap getTaskThumbnailsBitmap(ActivityManager am, int id)
synchronized (refLock)
try
if (getTaskThumbnails == null)
getTaskThumbnails = am.getClass().getDeclaredMethod(
"getTaskThumbnails", int.class);

if (getTaskThumbnails != null)
Object thumbnails = getTaskThumbnails.invoke(am,
Integer.valueOf(id));
if (thumbnails != null)
if (taskThumbnailsBitmap == null)
taskThumbnailsBitmap = thumbnails.getClass()
.getField("mainThumbnail");
if (taskThumbnailsBitmap != null)
return (Bitmap) taskThumbnailsBitmap
.get(thumbnails);



catch (Exception e)
Log.w(TAG, "getTaskThumbnailsBitmap error:" + e);
e.printStackTrace();


return null;

参考技术A 试试长按home键 参考技术B 什么意思呢啊

以上是关于android4.4 中如何获取最近应用的缩略图的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何获取应用程序私有文件的视频缩略图?

如何从文件中获取缩略图

如何在颤动中获取临时存储目录?

如何在最近的帖子Wordpress中添加缩略图

如何从 Flutter Web 中的 Uint8List 获取视频缩略图?

问题:最近屏幕缩略图中的透明颜色被深灰色替换。 (安卓)