一些常用SD卡操作的方法,APk管理之类的方法

2017-01-13 15:16:50来源:http://www.jianshu.com/p/e003bd3a29dc作者:Exception_Cui人点击

获取Android开机启动列表
/**
* 获取Android开机启动列表
*/
private static final String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED";
private static final String ACTION_BOOT_COMPLETED = "android.permission.ACTION_BOOT_COMPLETED";
public static List<AutoStartInfo> fetchInstalledApps(Context mContext) {
PackageManager pm = mContext.getPackageManager();
List<ApplicationInfo> appInfo = pm.getInstalledApplications(0);
Iterator<ApplicationInfo> appInfoIterator = appInfo.iterator();
List<AutoStartInfo> appList = new ArrayList<AutoStartInfo>(
appInfo.size());
while (appInfoIterator.hasNext()) {
ApplicationInfo app = appInfoIterator.next();
int flag = pm.checkPermission(RECEIVE_BOOT_COMPLETED,
app.packageName);
if (flag == PackageManager.PERMISSION_GRANTED) {
AutoStartInfo appMap = new AutoStartInfo();
String label = pm.getApplicationLabel(app).toString();
Drawable icon = pm.getApplicationIcon(app);
String packageName = app.packageName;
if ((app.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
appMap.setSystem(true);
// abAppProcessInfo.isSystem = true;
} else {
appMap.setSystem(false);
// abAppProcessInfo.isSystem = false;
}
// appMap.setDesc(desc);
appMap.setIcon(icon);
appMap.setPackageName(packageName);
appMap.setLabel(label);
appList.add(appMap);
}
}
return appList;
}

获取自启应用
/**
* 获取自启应用
*
* @param mContext
* @return
*/
public static List<AutoStartInfo> fetchAutoApps(Context mContext) {
PackageManager pm = mContext.getPackageManager();
Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED);
List<ResolveInfo> resolveInfoList = pm.queryBroadcastReceivers(intent,
PackageManager.GET_DISABLED_COMPONENTS);
List<AutoStartInfo> appList = new ArrayList<AutoStartInfo>();
// 得到的参数
String appName = null;
String packageReceiver = null;
Drawable icon = null;
boolean isSystem = false;
boolean isenable = true;
String packageName = null;
boolean isAutoStart = false;
boolean isBackStart = false;
/**
* 通过 PackageInfo 获取具体信息方法:
*
* 包名获取方法:packageInfo.packageName
* icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
* 应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
* 使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.
* GET_PERMISSIONS) .requestedPermissions
*
* 通过 ResolveInfo 获取具体信息方法:
*
* 包名获取方法:resolve.activityInfo.packageName
* icon获取获取方法:resolve.loadIcon(packageManager)
* 应用名称获取方法:resolve.loadLabel(packageManager).toString()
*
*/
if (resolveInfoList.size() > 0) {
for (int i = 0; resolveInfoList.size() > i; i++) {
isAutoStart = false;
isBackStart = false;
/**
* // 查找安装的package是否有开机启动权限 if(PackageManager.PERMISSION_GRANTED
* == context
* .getPackageManager().checkPermission(BOOT_START_PERMISSION,
* app.packageName))
*
* BOOT_COMPLETED BOOT_START_PERMISSION RECEIVE_BOOT_COMPLETED
* ACTION_BOOT_COMPLETED
*/
if (mContext.getPackageManager().checkPermission(
RECEIVE_BOOT_COMPLETED,
resolveInfoList.get(i).activityInfo.packageName) == PackageManager.PERMISSION_GRANTED) {
isAutoStart = true;
}
if (mContext.getPackageManager().checkPermission(
ACTION_BOOT_COMPLETED,
resolveInfoList.get(i).activityInfo.packageName) == PackageManager.PERMISSION_GRANTED) {
isBackStart = true;
}
appName = resolveInfoList.get(i).loadLabel(pm).toString();
packageName = resolveInfoList.get(i).activityInfo.packageName;
packageReceiver = resolveInfoList.get(i).activityInfo.packageName
+ "/" + resolveInfoList.get(i).activityInfo.name;
icon = resolveInfoList.get(i).loadIcon(pm);
ComponentName mComponentName2 = new ComponentName(
resolveInfoList.get(i).activityInfo.packageName,
resolveInfoList.get(i).activityInfo.name);
if (pm.getComponentEnabledSetting(mComponentName2) == 2) {
isenable = false;
} else {
isenable = true;
}
if ((resolveInfoList.get(i).activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
isSystem = true;
} else {
isSystem = false;
}
//
AutoStartInfo mAutoStartInfo = new AutoStartInfo();
mAutoStartInfo.setLabel(appName);
mAutoStartInfo.setSystem(isSystem);
mAutoStartInfo.setEnable(isenable);
mAutoStartInfo.setIcon(icon);
mAutoStartInfo.setPackageName(packageName);
mAutoStartInfo.setPackageReceiver(packageReceiver);
mAutoStartInfo.setAutoStart(isAutoStart);
mAutoStartInfo.setBackStart(isBackStart);
boolean isAdd = true;
if (appList != null) {
for (int j = 0; appList.size() > j; j++) {
if (appList.get(j).getPackageName().equals(packageName)) {
isAdd = false;
}
}
}
if (isAdd) {
appList.add(mAutoStartInfo);
}
}
}
return appList;
}

单位转换
/**
* 单位转换
*
* @param length
* @return
*/
public static String toSize(double length) {
long kb = 1024;
long mb = 1024 * kb;
long gb = 1024 * mb;
if (length < kb) {
return String.format("%d B", (int) length);
} else if (length < mb) {
return String.format("%.2f KB", length / kb);
} else if (length < gb) {
return String.format("%.2f MB", length / mb);
} else {
return String.format("%.2f GB", length / gb);
}
}
// storage, G M K B
public static String convertStorage(long size) {
long kb = 1024;
long mb = kb * 1024;
long gb = mb * 1024;
if (size >= gb) {
return String.format("%.1f GB", (float) size / gb);
} else if (size >= mb) {
float f = (float) size / mb;
return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
} else if (size >= kb) {
float f = (float) size / kb;
return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
} else
return String.format("%d B", size);
}
public static StorageSize convertStorageSize(long size) {
long kb = 1024;
long mb = kb * 1024;
long gb = mb * 1024;
StorageSize sto = new StorageSize();
if (size >= gb) {
sto.suffix = "GB";
sto.value = (float) size / gb;
return sto;
} else if (size >= mb) {
sto.suffix = "MB";
sto.value = (float) size / mb;
return sto;
} else if (size >= kb) {
sto.suffix = "KB";
sto.value = (float) size / kb;
return sto;
} else {
sto.suffix = "B";
sto.value = (float) size;
return sto;
}
}

获取SD卡信息
public static SDCardInfo getSDCardInfo() {
// String sDcString = Environment.getExternalStorageState();
if (Environment.isExternalStorageRemovable()) {
String sDcString = Environment.getExternalStorageState();
if (sDcString.equals(Environment.MEDIA_MOUNTED)) {
File pathFile = Environment.getExternalStorageDirectory();
try {
StatFs statfs = new StatFs(pathFile.getPath());
// 获取SDCard上BLOCK总数
long nTotalBlocks = statfs.getBlockCount();
// 获取SDCard上每个block的SIZE
long nBlocSize = statfs.getBlockSize();
// 获取可供程序使用的Block的数量
long nAvailaBlock = statfs.getAvailableBlocks();
// 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
long nFreeBlock = statfs.getFreeBlocks();
SDCardInfo info = new SDCardInfo();
// 计算SDCard 总容量大小MB
info.total = nTotalBlocks * nBlocSize;
// 计算 SDCard 剩余大小MB
info.free = nAvailaBlock * nBlocSize;
return info;
} catch (IllegalArgumentException e) {
}
}
}
return null;
}
/**
* data 目录 getDataDirectory()
*
* @param context
* @return
*/
public static SDCardInfo getSystemSpaceInfo(Context context) {
File path = Environment.getDataDirectory();
// File path = context.getCacheDir().getAbsoluteFile();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
long totalSize = blockSize * totalBlocks;
long availSize = availableBlocks * blockSize;
SDCardInfo info = new SDCardInfo();
info.total = totalSize;
info.free = availSize;
return info;
}
public static SDCardInfo getRootSpaceInfo() {
File path = Environment.getRootDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stat.getAvailableBlocks();
long totalSize = blockSize * totalBlocks;
long availSize = availableBlocks * blockSize;
// 获取SDCard上每个block的SIZE
long nBlocSize = stat.getBlockSize();
SDCardInfo info = new SDCardInfo();
// 计算SDCard 总容量大小MB
info.total = totalSize;
// 计算 SDCard 剩余大小MB
info.free = availSize;
return info;
}

沉浸状态栏
public void sethah(Window window) {
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
// 透明状态栏
// getWindow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 透明导航栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}

检查当前网络是否可用
 /**
* 检查当前网络是否可用
*
* @param activity
* @return
*/
public boolean isNetworkAvailable(Activity activity) {
Context context = activity.getApplicationContext();
// 获取手机所有连接管理对象(包括对Wifi,net等连接的管理)
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
} else {
// 获取NetworkInfo对象
NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();
if (networkInfo != null && networkInfo.length > 0) {
for (int i = 0; i < networkInfo.length; i++) {
System.out.println(i + "===state==="
+ networkInfo[i].getState());
System.out.println(i + "===style==="
+ networkInfo[i].getTypeName());
// 判断当前网络状态是否为连接状态
if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}

安装APK
/**
* 安装APK
*
* @param context
* @param packageName
*/
public void update(Context context, String packageName) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), packageName)),
"application/vnd.android.package-archive");
context.startActivity(intent);
}

判断某个程序是否安装在手机中
/**
* 判断某个程序是否安装在手机中
*
* @param context
* 上下文
* @param packageName
* 需要验证的包名
* @return 是否安装
*/
public static boolean isPackageExist(Context context, String packageName) {
if (packageName == null)
return false;
boolean packageExist = false;
PackageManager packageManager = context.getPackageManager();
try {
packageManager.getPackageInfo(packageName, 0);
packageExist = true;
} catch (PackageManager.NameNotFoundException ignored) {
// L.d("isPackageExist:" + ignored);
}
return packageExist;
}

判断APK是否已安装
  /**
* 判断APK是否已安装
*
* @param pm
* @param packageName
* @param versionCode
* @return
*/
public int doType(PackageManager pm, String packageName, int versionCode) {
List<PackageInfo> pakageinfos = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo pi : pakageinfos) {
String pi_packageName = pi.packageName;
int pi_versionCode = pi.versionCode;
// 如果这个包名在系统已经安装过的应用中存在
if (packageName.endsWith(pi_packageName)) {
// Log.i("test","此应用安装过了");
if (versionCode == pi_versionCode) {
Log.i("test", "已经安装,不用更新,可以卸载该应用");
return 1000;
} else if (versionCode > pi_versionCode) {
Log.i("test", "已经安装,有更新");
return 2000;
}
}
}
Log.i("test", "未安装该应用,可以安装");
return 3000;
}

获取当前版本的版本名字
/**
* 获取当前版本的版本名字
*
* @param context
* @return
*/
public String getVersion(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
return packageInfo.versionName;
} catch (Exception e) {
e.printStackTrace();
return context.getResources()
.getString(R.string.unknown_versionnum);
}
}

获取当前版本的版本号
  /**
* 获取当前版本的版本号
*
* @return
*/
public int getVersiontheCode(Context context) {
try {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
return packageInfo.versionCode;
} catch (Exception e) {
e.printStackTrace();
return R.string.unknown_versionnum;
}
}

判断WIFI是否连接
/ **
* 判断WIFI是否连接
*
* @param context
* @return true为已连接
*/
boolean isWifi = false;
public static boolean isWifiConnected(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiNetworkInfo = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifiNetworkInfo.isConnected()) {
return true;
}
return false;
}

删除单个文件
  ` /**
* 删除单个文件
*
* @param filePath
* 被删除文件的文件名
* @return 文件删除成功返回true,否则返回false
*/
public boolean deleteFile(String filePath, Context context) {
File file = new File(filePath);
if (file.isFile() && file.exists()) {
boolean isOK = file.delete();
scanFile(file, context);
return isOK;
} else {
Toast.makeText(context, "null", 0).show();
}
return false;
}`

扫描文件
 /**
* 扫描文件
*
* @param file
* @param context
*/
public void scanFile(File file, Context context) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
context.sendBroadcast(intent);
}
/**
* get,set
*/
private List<APKInfo> myFiles = new ArrayList<APKInfo>();
public List<APKInfo> getMyFiles() {
return myFiles;
}
public void setMyFiles(List<APKInfo> myFiles) {
this.myFiles = myFiles;
}

运用递归的思想,递归去找每个目录下面的apk文件
/**
* 运用递归的思想,递归去找每个目录下面的apk文件
*
* @param file
*/
public void FindAllAPKFile(File file, Context context) {
// 手机上的文件,目前只判断SD卡上的APK文件
// file = Environment.getDataDirectory();
// SD卡上的文件目录
if (file.isFile()) {
String name_s = file.getName();
APKInfo myFile = new APKInfo();
String apk_path = null;
// MimeTypeMap.getSingleton()
if (name_s.toLowerCase().endsWith(".apk")) {
apk_path = file.getAbsolutePath();// apk文件的绝对路劲
// System.out.println("----" + file.getAbsolutePath() + "" +
// name_s);
PackageManager pm = context.getPackageManager();
PackageInfo packageInfo = pm.getPackageArchiveInfo(apk_path,
PackageManager.GET_ACTIVITIES);
ApplicationInfo appInfo = packageInfo.applicationInfo;
/** 获取apk的图标 */
appInfo.sourceDir = apk_path;
appInfo.publicSourceDir = apk_path;
Drawable apk_icon = appInfo.loadIcon(pm);
myFile.setIcon(apk_icon);
/** 得到包名 */
String packageName = packageInfo.packageName;
myFile.setName(packageName);
/** apk的绝对路劲 */
myFile.setPath(file.getAbsolutePath());
/** apk的版本名称 String */
String versionName = packageInfo.versionName;
myFile.setVersionName(versionName);
/** apk的版本号码 int */
int versionCode = packageInfo.versionCode;
myFile.setVersionCode(versionCode);
/** 安装处理类型 */
int type = doType(pm, packageName, versionCode);
myFile.setType(type);
Log.i("ok", "处理类型:" + String.valueOf(type) + "/n"
+ "------------------我是纯洁的分割线-------------------");
myFiles.add(myFile);
}
// String apk_app = name_s.substring(name_s.lastIndexOf("."));
} else {
File[] files = file.listFiles();
if (files != null && files.length > 0) {
for (File file_str : files) {
FindAllAPKFile(file_str, context);
}
}
}
}

获得所有的应用程序信息
/**
* 获得所有的应用程序信息
*
* @return
*/
public static List<AppBean> getAllApps(Context context) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> packages = pm.getInstalledPackages(0);
List<AppBean> list = new ArrayList<AppBean>();
for (PackageInfo info : packages) {
ApplicationInfo applicationInfo = info.applicationInfo;
String name = applicationInfo.loadLabel(pm).toString();
Drawable icon = applicationInfo.loadIcon(pm);
String sourceDir = applicationInfo.sourceDir;
File file = new File(sourceDir);
int flags = applicationInfo.flags;
boolean isInstallSD = false;
if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == ApplicationInfo.FLAG_EXTERNAL_STORAGE) {
isInstallSD = true;
}
boolean isSystem = false;
if ((flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) {
isSystem = true;
}
AppBean bean = new AppBean();
bean.icon = icon;
bean.name = name;
bean.size = file.length();
bean.isInstallSD = isInstallSD;
bean.isSystem = isSystem;
bean.packageName = info.packageName;
list.add(bean);
}
return list;
}
public static List<AppBean> getAllLaunchApps(Context context) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> packages = pm.getInstalledPackages(0);
List<AppBean> list = new ArrayList<AppBean>();
for (PackageInfo info : packages) {
Intent intent = pm.getLaunchIntentForPackage(info.packageName);
if (intent == null) {
continue;
}
ApplicationInfo applicationInfo = info.applicationInfo;
String name = applicationInfo.loadLabel(pm).toString();
Drawable icon = applicationInfo.loadIcon(pm);
String sourceDir = applicationInfo.sourceDir;
File file = new File(sourceDir);
int flags = applicationInfo.flags;
boolean isInstallSD = false;
if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == ApplicationInfo.FLAG_EXTERNAL_STORAGE) {
isInstallSD = true;
}
boolean isSystem = false;
if ((flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) {
isSystem = true;
}
AppBean bean = new AppBean();
bean.icon = icon;
bean.name = name;
bean.size = file.length();
bean.isInstallSD = isInstallSD;
bean.isSystem = isSystem;
bean.packageName = info.packageName;
list.add(bean);
}
return list;
}



最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台