55import android .app .AppOpsManager ;
66import android .content .Context ;
77import android .content .Intent ;
8- import android .content .pm .PackageInfo ;
98import android .content .pm .PackageManager ;
109import android .content .pm .ResolveInfo ;
10+ import android .net .Uri ;
1111import android .os .Binder ;
1212import android .os .Build ;
1313import android .os .Environment ;
14- import android .text .TextUtils ;
14+ import android .provider .Settings ;
15+ import android .util .Log ;
1516
1617import java .io .File ;
1718import java .io .FileInputStream ;
2930 */
3031
3132public final class MIUIUtils {
33+ public static final String TAG = "MIUIUtils" ;
3234 private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code" ;
3335 private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name" ;
3436 private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage" ;
@@ -62,7 +64,7 @@ public static boolean checkOp(Context context, int op) {
6264 e .printStackTrace ();
6365 }
6466 } else {
65- android . util . Log .e ("MIUIUtils" , "Below API 19 cannot invoke!" );
67+ Log .e (TAG , "Below API 19 cannot invoke!" );
6668 }
6769 return false ;
6870 }
@@ -77,33 +79,93 @@ public static String getMIUIVersionName() {
7779 return null ;
7880 }
7981
82+ /**
83+ * 小米 ROM 权限申请
84+ */
8085 public static void openMiuiPermissionActivity (Context context ) {
86+ int versionCode = Integer .parseInt (getMIUIVersionName ().substring (1 ));
87+ Log .e (TAG , "this is a special MIUI rom version, its version code " + versionCode );
88+ if (versionCode == 5 ) {
89+ goToMiuiPermissionActivity_V5 (context );
90+ } else if (versionCode == 6 ) {
91+ goToMiuiPermissionActivity_V6 (context );
92+ } else if (versionCode == 7 ) {
93+ goToMiuiPermissionActivity_V7 (context );
94+ } else if (versionCode == 8 ) {
95+ goToMiuiPermissionActivity_V8 (context );
96+ }
97+ }
98+
99+ /**
100+ * 小米 V5 版本 ROM权限申请
101+ */
102+ public static void goToMiuiPermissionActivity_V5 (Context context ) {
103+ String packageName = context .getPackageName ();
104+ Intent intent = new Intent (Settings .ACTION_APPLICATION_DETAILS_SETTINGS );
105+ Uri uri = Uri .fromParts ("package" , packageName , null );
106+ intent .setData (uri );
107+ intent .setFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
108+ if (isIntentAvailable (context , intent )) {
109+ startActivityForResult (context , intent );
110+ } else {
111+ Log .e (TAG , "intent is not available!" );
112+ }
113+ }
114+
115+ /**
116+ * 小米 V6 版本 ROM权限申请
117+ */
118+ public static void goToMiuiPermissionActivity_V6 (Context context ) {
81119 Intent intent = new Intent ("miui.intent.action.APP_PERM_EDITOR" );
82- if (TextUtils .equals ("V5" , getMIUIVersionName ())) {
83- PackageInfo pInfo ;
84- try {
85- pInfo = context .getPackageManager ().getPackageInfo (context .getPackageName (), 0 );
86- } catch (PackageManager .NameNotFoundException e ) {
87- e .printStackTrace ();
88- return ;
89- }
90- intent .setClassName ("com.miui.securitycenter" , "com.miui.securitycenter.permission.AppPermissionsEditor" );
91- intent .putExtra ("extra_package_uid" , pInfo .applicationInfo .uid );
120+ intent .setClassName ("com.miui.securitycenter" , "com.miui.permcenter.permissions.AppPermissionsEditorActivity" );
121+ intent .putExtra ("extra_pkgname" , context .getPackageName ());
122+ intent .setFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
123+ if (isIntentAvailable (context , intent )) {
124+ startActivityForResult (context , intent );
92125 } else {
93- intent .setClassName ("com.miui.securitycenter" , "com.miui.permcenter.permissions.AppPermissionsEditorActivity" );
94- intent .putExtra ("extra_pkgname" , context .getPackageName ());
126+ Log .e (TAG , "Intent is not available!" );
95127 }
96- if (isActivityAvailable (context , intent )) {
97- if (context instanceof Activity ) {
98- Activity a = (Activity ) context ;
99- a .startActivityForResult (intent , 2 );
100- }
128+ }
129+
130+ /**
131+ * 小米 V7 版本 ROM权限申请
132+ */
133+ public static void goToMiuiPermissionActivity_V7 (Context context ) {
134+ Intent intent = new Intent ("miui.intent.action.APP_PERM_EDITOR" );
135+ intent .setClassName ("com.miui.securitycenter" , "com.miui.permcenter.permissions.AppPermissionsEditorActivity" );
136+ intent .putExtra ("extra_pkgname" , context .getPackageName ());
137+ intent .setFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
138+ if (isIntentAvailable (context , intent )) {
139+ startActivityForResult (context , intent );
140+ } else {
141+ goToMiuiPermissionActivity_V8 (context );// 兼容我的miui7开发版 我的com.miui.securitycenter的app升级成了2.0.5了,只能用v8的代码运行
142+ }
143+ }
144+
145+ /**
146+ * 小米 V8 版本 ROM权限申请
147+ */
148+ public static void goToMiuiPermissionActivity_V8 (Context context ) {
149+ Intent intent = new Intent ("miui.intent.action.APP_PERM_EDITOR" );
150+ intent .setClassName ("com.miui.securitycenter" , "com.miui.permcenter.permissions.PermissionsEditorActivity" );
151+ intent .putExtra ("extra_pkgname" , context .getPackageName ());
152+ intent .setFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
153+ if (isIntentAvailable (context , intent )) {
154+ startActivityForResult (context , intent );
101155 } else {
102- android .util .Log .e ("MIUIUtils" , "Intent is not available!" );
156+ intent = new Intent ("miui.intent.action.APP_PERM_EDITOR" );
157+ intent .setPackage ("com.miui.securitycenter" );
158+ intent .putExtra ("extra_pkgname" , context .getPackageName ());
159+ intent .setFlags (Intent .FLAG_ACTIVITY_NEW_TASK );
160+ if (isIntentAvailable (context , intent )) {
161+ startActivityForResult (context , intent );
162+ } else {
163+ Log .e (TAG , "Intent is not available!" );
164+ }
103165 }
104166 }
105167
106- public static boolean isActivityAvailable (Context cxt , Intent intent ) {
168+ private static boolean isIntentAvailable (Context cxt , Intent intent ) {
107169 PackageManager pm = cxt .getPackageManager ();
108170 if (pm == null ) {
109171 return false ;
@@ -113,6 +175,13 @@ public static boolean isActivityAvailable(Context cxt, Intent intent) {
113175 return list != null && list .size () > 0 ;
114176 }
115177
178+ private static void startActivityForResult (Context context , Intent intent ) {
179+ if (context instanceof Activity ) {
180+ Activity a = (Activity ) context ;
181+ a .startActivityForResult (intent , 2 );
182+ }
183+ }
184+
116185 public static class BuildProperties {
117186
118187 private final Properties properties ;
0 commit comments