Android 系统工具类SystemUtils收集整理

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

包含的功能有:

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

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


SystemUtils.java

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


开机清除用户数据

添加开机广播

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

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

AndroidManifest.xml 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<manifest xmlns:android= "http://schemas.android.com/apk/res/android" package = "com.player.playlauncher" android:versioncode= "1" android:versionname= "1.0" android:shareduserid= "android.uid.system" >
 
     <uses-sdk android:minsdkversion= "8" android:targetsdkversion= "17" >
 
     <uses-permission android:name= "android.permission.RECEIVE_BOOT_COMPLETED" >
     <uses-permission android:name= "android.permission.CLEAR_APP_USER_DATA" >
     
     
         
             <intent-filter>
                 
                 <category android:name= "android.intent.category.LAUNCHER" >
             </category></action></intent-filter>
         </activity>
         
         <receiver android:name= ".CleanDataReceiverd" >
             <intent-filter>
                 
             </action></intent-filter>
         </receiver>
     </application>
 
</uses-permission></uses-permission></uses-sdk></manifest>

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

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

LOCAL_CERTIFICATE := platform


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值