工具类笔记,以便日后使用
//发送按键
public static class SendKeyDownThread extends Thread {
private int keyCode = KeyEvent.KEYCODE_UNKNOWN;
public SendKeyDownThread(int keyCode) {
this.keyCode = keyCode;
}
@Override
public void run() {
super.run();
Instrumentation instrumentation = new Instrumentation();
instrumentation.sendKeyDownUpSync(keyCode);
}
}
//启动APP
public static void startApp(Context context, String packName) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packName);
try {
if (intent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(intent);
}
}
catch (ActivityNotFoundException ignored) {
}
}
//检测APK是否安装
public static boolean isApkInstalled(Context context, String packageName) {
boolean installed = false;
PackageInfo packageInfo = null;
try {
packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);
installed = true;
} catch (PackageManager.NameNotFoundException e) {
installed = false;
}
return installed;
}
//字节数组转Drawable
public static synchronized Drawable byteToDrawable(byte[] img) {
Bitmap bitmap;
if (img != null) {
bitmap = BitmapFactory.decodeByteArray(img,0, img.length);
Drawable drawable = new BitmapDrawable(bitmap);
return drawable;
}
return null;
}
//drawable转字节数组
public static synchronized byte[] drawableToByte(Drawable drawable) {
if (drawable != null) {
Bitmap bitmap = Bitmap.createBitmap(
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight(),
drawable.getOpacity() != PixelFormat.OPAQUE ?
Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
drawable.draw(canvas);
int size = bitmap.getWidth() * bitmap.getHeight() * 4;
ByteArrayOutputStream baos = new ByteArrayOutputStream(size);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imagedata = baos.toByteArray();
return imagedata;
}
return null;
}
//通过包名获取应用图标
public static Drawable getAppIconByPackageName(Context context, String packName) {
PackageManager pm = context.getPackageManager();
try {
ApplicationInfo info = pm.getApplicationInfo(packName, 0);
return info.loadIcon(pm);
} catch (PackageManager.NameNotFoundException e) {
//e.printStackTrace();
}
return context.getResources().getDrawable(R.drawable.selector_customize);
}
//通过包名获取应用名称
public static String getAppNameByPackageName(Context context, String packName) {
PackageManager pm = context.getPackageManager();
try {
ApplicationInfo info = pm.getApplicationInfo(packName, 0);
return info.loadLabel(pm).toString();
} catch (PackageManager.NameNotFoundException e) {
//e.printStackTrace();
}
return context.getResources().getString(R.string.str_app_customize);
}
/**
* 获取目录下所有文件
* @param path 指定目录路径
* @return
*/
public static List<String> getFilesAllName(String path) {
File file=new File(path);
File[] files=file.listFiles();
if (files == null){
Log.e("error","空目录");
return null;
}
List<String> s = new ArrayList<>();
for (File value : files) {
s.add(value.getAbsolutePath());
}
return s;
}
/**
* 判断服务是否正在运行
* @param context 上下文对象
* @param serviceName 服务名称(包括包名)
* @return true则表示正在运行,false则表示没有运行
*/
public static boolean isRunning(Context context, String serviceName) {
// 获取Activity管理者对象
ActivityManager mg = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
// 获取正在运行的服务(此处设置最多取1000个)
List<ActivityManager.RunningServiceInfo> services = mg.getRunningServices(1000);
// 遍历,若存在名字和传入的serviceName的一致则说明存在
for (ActivityManager.RunningServiceInfo runningServiceInfo : services) {
if (runningServiceInfo.service.getClassName().equals(serviceName)) {
return true;
}
}
return false;
}