Android 系统工具类SystemUtils收集整理(持续更新)

最近做的功能中涉及到了一些关于系统方面的东西,自己摸索以及网上搜集整理出来了一个工具类方便调用

包含的功能有:

获取系统中所有APP应用、获取用户安装的APP应用、根据包名和Activity启动类查询应用信息、跳转到WIFI设置、WIFI网络开关、移动网络开关、GPS开关 当前若关则打开 当前若开则关闭、调节系统音量、设置亮度、获取屏幕的亮度、跳转到系统设置、获取文件夹下所有文件、获取视频的缩略图 、打开视频文件...

工具类会持续更新,与大家共同学习进步。


SystemUtils.java

  1. package com.player.utils;  
  2.   
  3. import java.io.File;  
  4. import java.lang.reflect.Field;  
  5. import java.lang.reflect.InvocationTargetException;  
  6. import java.lang.reflect.Method;  
  7. import java.util.ArrayList;  
  8. import java.util.Collections;  
  9. import java.util.List;  
  10.   
  11. import android.app.Activity;  
  12. import android.app.PendingIntent;  
  13. import android.app.PendingIntent.CanceledException;  
  14. import android.content.ComponentName;  
  15. import android.content.ContentResolver;  
  16. import android.content.Context;  
  17. import android.content.Intent;  
  18. import android.content.pm.ActivityInfo;  
  19. import android.content.pm.ApplicationInfo;  
  20. import android.content.pm.PackageManager;  
  21. import android.content.pm.PackageManager.NameNotFoundException;  
  22. import android.content.pm.ResolveInfo;  
  23. import android.graphics.Bitmap;  
  24. import android.graphics.drawable.Drawable;  
  25. import android.media.AudioManager;  
  26. import android.media.ThumbnailUtils;  
  27. import android.net.ConnectivityManager;  
  28. import android.net.Uri;  
  29. import android.net.wifi.WifiManager;  
  30. import android.provider.Settings;  
  31.   
  32. import com.player.bean.AppInfo;  
  33.   
  34. public class SystemUtils {  
  35.   
  36.     /** 
  37.      * 获取系统所有APP应用 
  38.      *  
  39.      * @param context 
  40.      */  
  41.     public static ArrayList<AppInfo> getAllApp(Context context) {  
  42.         PackageManager manager = context.getPackageManager();  
  43.         Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  
  44.         mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
  45.         List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0);  
  46.         // 将获取到的APP的信息按名字进行排序  
  47.         Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager));  
  48.         ArrayList<AppInfo> appList = new ArrayList<AppInfo>();  
  49.         for (ResolveInfo info : apps) {  
  50.             AppInfo appInfo = new AppInfo();  
  51.   
  52.             appInfo.setAppLable(info.loadLabel(manager) + "");  
  53.             appInfo.setAppIcon(info.loadIcon(manager));  
  54.             appInfo.setAppPackage(info.activityInfo.packageName);  
  55.             appInfo.setAppClass(info.activityInfo.name);  
  56.             appList.add(appInfo);  
  57.             System.out.println("info.activityInfo.packageName="+info.activityInfo.packageName);  
  58.             System.out.println("info.activityInfo.name="+info.activityInfo.name);  
  59.         }  
  60.   
  61.         return appList;  
  62.     }  
  63.   
  64.     /** 
  65.      * 获取用户安装的APP应用 
  66.      *  
  67.      * @param context 
  68.      */  
  69.     public static ArrayList<AppInfo> getUserApp(Context context) {  
  70.         PackageManager manager = context.getPackageManager();  
  71.         Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  
  72.         mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
  73.         List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0);  
  74.         // 将获取到的APP的信息按名字进行排序  
  75.         Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager));  
  76.         ArrayList<AppInfo> appList = new ArrayList<AppInfo>();  
  77.         for (ResolveInfo info : apps) {  
  78.             AppInfo appInfo = new AppInfo();  
  79.             ApplicationInfo ainfo = info.activityInfo.applicationInfo;  
  80.             if ((ainfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {  
  81.                 appInfo.setAppLable(info.loadLabel(manager) + "");  
  82.                 appInfo.setAppIcon(info.loadIcon(manager));  
  83.                 appInfo.setAppPackage(info.activityInfo.packageName);  
  84.                 appInfo.setAppClass(info.activityInfo.name);  
  85.                 appList.add(appInfo);  
  86.             }  
  87.         }  
  88.   
  89.         return appList;  
  90.     }  
  91.   
  92.     /** 
  93.      * 根据包名和Activity启动类查询应用信息 
  94.      *  
  95.      * @param cls 
  96.      * @param pkg 
  97.      * @return 
  98.      */  
  99.     public static AppInfo getAppByClsPkg(Context context, String pkg, String cls) {  
  100.         AppInfo appInfo = new AppInfo();  
  101.   
  102.         PackageManager pm = context.getPackageManager();  
  103.         Drawable icon;  
  104.         CharSequence label = "";  
  105.         ComponentName comp = new ComponentName(pkg, cls);  
  106.         try {  
  107.             ActivityInfo info = pm.getActivityInfo(comp, 0);  
  108.             icon = pm.getApplicationIcon(info.applicationInfo);  
  109.             label = pm.getApplicationLabel(pm.getApplicationInfo(pkg, 0));  
  110.         } catch (NameNotFoundException e) {  
  111.             icon = pm.getDefaultActivityIcon();  
  112.         }  
  113.         appInfo.setAppClass(cls);  
  114.         appInfo.setAppIcon(icon);  
  115.         appInfo.setAppLable(label + "");  
  116.         appInfo.setAppPackage(pkg);  
  117.   
  118.         return appInfo;  
  119.     }  
  120.   
  121.     /** 
  122.      * 跳转到WIFI设置 
  123.      *  
  124.      * @param context 
  125.      */  
  126.     public static void intentWifiSetting(Context context) {  
  127.         if (android.os.Build.VERSION.SDK_INT > 10) {  
  128.             // 3.0以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面  
  129.             context.startActivity(new Intent(  
  130.                     android.provider.Settings.ACTION_SETTINGS));  
  131.         } else {  
  132.             context.startActivity(new Intent(  
  133.                     android.provider.Settings.ACTION_WIRELESS_SETTINGS));  
  134.         }  
  135.     }  
  136.   
  137.     /** 
  138.      * WIFI网络开关 
  139.      *  
  140.      */  
  141.     public static void toggleWiFi(Context context, boolean enabled) {  
  142.         WifiManager wm = (WifiManager) context  
  143.                 .getSystemService(Context.WIFI_SERVICE);  
  144.         wm.setWifiEnabled(enabled);  
  145.     }  
  146.   
  147.     /** 
  148.      * 移动网络开关 
  149.      */  
  150.     public static void toggleMobileData(Context context, boolean enabled) {  
  151.         ConnectivityManager conMgr = (ConnectivityManager) context  
  152.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
  153.         Class<?> conMgrClass = null// ConnectivityManager类  
  154.         Field iConMgrField = null// ConnectivityManager类中的字段  
  155.         Object iConMgr = null// IConnectivityManager类的引用  
  156.         Class<?> iConMgrClass = null// IConnectivityManager类  
  157.         Method setMobileDataEnabledMethod = null// setMobileDataEnabled方法  
  158.         try {  
  159.             // 取得ConnectivityManager类  
  160.             conMgrClass = Class.forName(conMgr.getClass().getName());  
  161.             // 取得ConnectivityManager类中的对象mService  
  162.             iConMgrField = conMgrClass.getDeclaredField("mService");  
  163.             // 设置mService可访问  
  164.             iConMgrField.setAccessible(true);  
  165.             // 取得mService的实例化类IConnectivityManager  
  166.             iConMgr = iConMgrField.get(conMgr);  
  167.             // 取得IConnectivityManager类  
  168.             iConMgrClass = Class.forName(iConMgr.getClass().getName());  
  169.             // 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法  
  170.             setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod(  
  171.                     "setMobileDataEnabled", Boolean.TYPE);  
  172.             // 设置setMobileDataEnabled方法可访问  
  173.             setMobileDataEnabledMethod.setAccessible(true);  
  174.             // 调用setMobileDataEnabled方法  
  175.             setMobileDataEnabledMethod.invoke(iConMgr, enabled);  
  176.         } catch (ClassNotFoundException e) {  
  177.             e.printStackTrace();  
  178.         } catch (NoSuchFieldException e) {  
  179.             e.printStackTrace();  
  180.         } catch (SecurityException e) {  
  181.             e.printStackTrace();  
  182.         } catch (NoSuchMethodException e) {  
  183.             e.printStackTrace();  
  184.         } catch (IllegalArgumentException e) {  
  185.             e.printStackTrace();  
  186.         } catch (IllegalAccessException e) {  
  187.             e.printStackTrace();  
  188.         } catch (InvocationTargetException e) {  
  189.             e.printStackTrace();  
  190.         }  
  191.     }  
  192.   
  193.     /** 
  194.      * GPS开关 当前若关则打开 当前若开则关闭 
  195.      */  
  196.     public static void toggleGPS(Context context) {  
  197.         Intent gpsIntent = new Intent();  
  198.         gpsIntent.setClassName("com.android.settings",  
  199.                 "com.android.settings.widget.SettingsAppWidgetProvider");  
  200.         gpsIntent.addCategory("android.intent.category.ALTERNATIVE");  
  201.         gpsIntent.setData(Uri.parse("custom:3"));  
  202.         try {  
  203.             PendingIntent.getBroadcast(context, 0, gpsIntent, 0).send();  
  204.         } catch (CanceledException e) {  
  205.             e.printStackTrace();  
  206.         }  
  207.     }  
  208.   
  209.     /** 
  210.      * 调节系统音量 
  211.      *  
  212.      * @param context 
  213.      */  
  214.     public static void holdSystemAudio(Context context) {  
  215.         AudioManager audiomanage = (AudioManager) context  
  216.                 .getSystemService(Context.AUDIO_SERVICE);  
  217.         // 获取系统最大音量  
  218.         // int maxVolume = audiomanage.getStreamMaxVolume(AudioManager.STREAM_MUSIC);   
  219.         // 获取当前音量  
  220.         // int currentVolume = audiomanage.getStreamVolume(AudioManager.STREAM_RING);   
  221.         // 设置音量  
  222.         // audiomanage.setStreamVolume(AudioManager.STREAM_SYSTEM, currentVolume, AudioManager.FLAG_PLAY_SOUND);  
  223.           
  224.         // 调节音量  
  225.         // ADJUST_RAISE 增大音量,与音量键功能相同   
  226.         // ADJUST_LOWER 降低音量  
  227.         audiomanage.adjustStreamVolume(AudioManager.STREAM_SYSTEM,  
  228.                 AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);  
  229.   
  230.     }  
  231.   
  232.     /** 
  233.      * 设置亮度(每30递增) 
  234.      *  
  235.      * @param resolver 
  236.      * @param brightness 
  237.      */  
  238.     public static void setBrightness(Activity activity) {  
  239.         ContentResolver resolver = activity.getContentResolver();  
  240.         Uri uri = android.provider.Settings.System  
  241.                 .getUriFor("screen_brightness");  
  242.         int nowScreenBri = getScreenBrightness(activity);  
  243.         nowScreenBri = nowScreenBri <= 225 ? nowScreenBri + 30 : 30;  
  244.         System.out.println("nowScreenBri==" + nowScreenBri);  
  245.         android.provider.Settings.System.putInt(resolver, "screen_brightness",  
  246.                 nowScreenBri);  
  247.         resolver.notifyChange(uri, null);  
  248.     }  
  249.   
  250.     /** 
  251.      * 获取屏幕的亮度 
  252.      *  
  253.      * @param activity 
  254.      * @return 
  255.      */  
  256.     public static int getScreenBrightness(Activity activity) {  
  257.         int nowBrightnessValue = 0;  
  258.         ContentResolver resolver = activity.getContentResolver();  
  259.         try {  
  260.             nowBrightnessValue = android.provider.Settings.System.getInt(  
  261.                     resolver, Settings.System.SCREEN_BRIGHTNESS);  
  262.         } catch (Exception e) {  
  263.             e.printStackTrace();  
  264.         }  
  265.         return nowBrightnessValue;  
  266.     }  
  267.   
  268.     /** 
  269.      * 跳转到系统设置 
  270.      *  
  271.      * @param context 
  272.      */  
  273.     public static void intentSetting(Context context) {  
  274.         String pkg = "com.android.settings";  
  275.         String cls = "com.android.settings.Settings";  
  276.   
  277.         ComponentName component = new ComponentName(pkg, cls);  
  278.         Intent intent = new Intent();  
  279.         intent.setComponent(component);  
  280.   
  281.         context.startActivity(intent);  
  282.     }  
  283.       
  284.     /** 
  285.      * 获取文件夹下所有文件 
  286.      * @param path 
  287.      * @return 
  288.      */  
  289.     public static ArrayList<File> getFilesArray(String path){  
  290.         File file = new File(path);  
  291.         File files[] = file.listFiles();  
  292.         ArrayList<File> listFile = new ArrayList<File>();  
  293.         if (files != null) {  
  294.             for (int i = 0; i < files.length; i++) {  
  295.                 if (files[i].isFile()) {  
  296.                     listFile.add(files[i]);  
  297.                 }  
  298.                 if (files[i].isDirectory()) {  
  299.                     listFile.addAll(getFilesArray(files[i].toString()));  
  300.                 }  
  301.             }  
  302.         }  
  303.         return listFile;  
  304.     }  
  305.       
  306.     /**  
  307.      * 获取视频的缩略图  
  308.      * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。  
  309.      * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。  
  310.      * @param videoPath 视频的路径  
  311.      * @param width 指定输出视频缩略图的宽度  
  312.      * @param height 指定输出视频缩略图的高度度  
  313.      * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。  
  314.      *            其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96  
  315.      * @return 指定大小的视频缩略图  
  316.      */    
  317.     public static Bitmap getVideoThumbnail(String videoPath, int width, int height,    
  318.             int kind) {    
  319.         Bitmap bitmap = null;    
  320.         // 获取视频的缩略图     
  321.         bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);    
  322.         //System.out.println("w"+bitmap.getWidth());    
  323.         //System.out.println("h"+bitmap.getHeight());    
  324.         bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,    
  325.                 ThumbnailUtils.OPTIONS_RECYCLE_INPUT);    
  326.         return bitmap;    
  327.     }  
  328.       
  329.     /** 
  330.      * 打开视频文件 
  331.      * @param context 
  332.      * @param file 视频文件 
  333.      */  
  334.     public static void intentVideo(Context context, File file){  
  335.         Intent intent = new Intent(Intent.ACTION_VIEW);  
  336.         String type = "video/*";  
  337.         Uri uri = Uri.fromFile(file);  
  338.         intent.setDataAndType(uri, type);  
  339.         context.startActivity(intent);  
  340.     }  
  341. }  


开机清除用户数据

添加开机广播

  1. package com.topwise.airlinemanager;  
  2.   
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.lang.reflect.Method;  
  5. import java.util.List;  
  6.   
  7. import android.app.ActivityManager;  
  8. import android.content.BroadcastReceiver;  
  9. import android.content.Context;  
  10. import android.content.Intent;  
  11. import android.content.pm.IPackageDataObserver;  
  12. import android.content.pm.PackageInfo;  
  13. import android.content.pm.PackageManager;  
  14. import android.util.Log;  
  15.   
  16. /** 
  17.  * 开机广播 
  18.  * @author XiaoSai 
  19.  * 
  20.  */  
  21. public class CleanDataReceiverd extends BroadcastReceiver {  
  22.   
  23.     @Override  
  24.     public void onReceive(Context context, Intent intent) {  
  25.         if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {  
  26.             //清除用户数据  
  27.             cleanUserData(context);  
  28.         }  
  29.     }  
  30.   
  31.     class ClearUserDataObserver extends IPackageDataObserver.Stub {  
  32.         public void onRemoveCompleted(final String packageName,  
  33.                 final boolean succeeded) {  
  34.   
  35.         }  
  36.     }  
  37.   
  38.     private void cleanUserData(Context context) {  
  39.         PackageManager manager = context.getPackageManager();  
  40.         List<PackageInfo> packages = manager.getInstalledPackages(0);  
  41.   
  42.         ClearUserDataObserver mClearDataObserver = new ClearUserDataObserver();  
  43.   
  44.         ActivityManager am = (ActivityManager) context  
  45.                 .getSystemService(Context.ACTIVITY_SERVICE);  
  46.   
  47.         Method targetMethod = null;  
  48.         Class<?> temp = am.getClass();  
  49.         // String className = temp.getName();  
  50.         Method[] methods = temp.getMethods();  
  51.         for (int j = 0; j < methods.length; j++) {  
  52.             if (("clearApplicationUserData".equals(methods[j].getName()))) {  
  53.                 targetMethod = methods[j];  
  54.                 break;  
  55.             }  
  56.         }  
  57.   
  58.         String pkg = null;  
  59.         if (packages != null && packages.size() > 0) {  
  60.             for (int i = 0; i < packages.size(); i++) {  
  61.                 pkg = packages.get(i).packageName;  
  62.                 if (pkg.equals("com.sina.weibotab")  
  63.                         || pkg.equals("com.tencent.android.pad")  
  64.                         || pkg.equals("com.tencent.hd.qq")  
  65.                         || pkg.equals("com.tencent.WBlog")  
  66.                         || pkg.equals("com.tencent.mm")) {  
  67.                     try {  
  68.                         targetMethod.invoke(am, pkg, mClearDataObserver);  
  69.                         Log.i("XIAOS""clean pgk "+pkg);  
  70.                     } catch (IllegalArgumentException e) {  
  71.                         e.printStackTrace();  
  72.                     } catch (IllegalAccessException e) {  
  73.                         e.printStackTrace();  
  74.                     } catch (InvocationTargetException e) {  
  75.                         e.printStackTrace();  
  76.                     }  
  77.                 }  
  78.             }  
  79.         }  
  80.     }  
  81. }  

清除用户数据需要调用ActivityManager类中的clearApplicationUserData方法,但是这个方法被系统给隐藏类,调用不了,不过我们可以通过反射机制来调用

AndroidManifest.xml 

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     package="com.player.playlauncher"  
  3.     android:versionCode="1"  
  4.     android:versionName="1.0"   
  5.     android:sharedUserId="android.uid.system">  
  6.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="17" />  
  10.   
  11.     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
  12.     <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>  
  13.       
  14.     <application  
  15.         android:allowBackup="true"  
  16.         android:icon="@drawable/ic_launcher"  
  17.         android:label="@string/app_name"  
  18.         android:theme="@style/AppTheme" >  
  19.         <activity   
  20.             android:name="com.player.playlauncher.FirstLevel"  
  21.             android:label="@string/app_name"  
  22.             android:icon="@drawable/ic_launcher">  
  23.             <intent-filter >  
  24.                 <action android:name="android.intent.action.MAIN"/>  
  25.                 <category android:name="android.intent.category.LAUNCHER"/>  
  26.             </intent-filter>  
  27.         </activity>  
  28.           
  29.         <receiver   
  30.             android:name=".CleanDataReceiverd">  
  31.             <intent-filter>  
  32.                 <action android:name="android.intent.action.BOOT_COMPLETED" />  
  33.             </intent-filter>  
  34.         </receiver>  
  35.     </application>  
  36.   
  37. </manifest>  

保存可能会报错,clean 一下项目就可以了

最后还需要在 Android.mk 中添加 一行

LOCAL_CERTIFICATE := platform


成功源于不断的学习和积累 !


/--------------------------------------------------------------------------------------------------------

囊括大部分Android常用工具类
https://github.com/jingle1267/android-utils

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值