1
1
package com .pyy .signin ;
2
2
3
3
import android .app .Activity ;
4
- import android .app .AlertDialog ;
4
+ import android .app .AppOpsManager ;
5
5
import android .content .Context ;
6
- import android .content .DialogInterface ;
7
6
import android .content .Intent ;
8
7
import android .content .pm .PackageManager ;
8
+ import android .os .Build ;
9
9
import android .os .Bundle ;
10
- import android .os .Looper ;
11
10
import android .provider .Settings ;
12
- import android .support .annotation .NonNull ;
13
- import android .util .Log ;
14
- import android .view .Gravity ;
15
- import android .view .LayoutInflater ;
16
11
import android .view .View ;
17
- import android .view .ViewGroup ;
18
- import android .widget .ArrayAdapter ;
19
12
import android .widget .Button ;
20
- import android .widget .CheckBox ;
21
- import android .widget .CompoundButton ;
22
- import android .widget .ImageView ;
23
13
import android .widget .ListView ;
24
- import android .widget .TextView ;
25
- import android .widget .Toast ;
26
-
27
- import java .io .DataOutputStream ;
28
14
import java .util .ArrayList ;
29
- import java .util .concurrent .ThreadFactory ;
30
- import java .util .concurrent .TimeUnit ;
31
15
import java .util .concurrent .locks .Condition ;
32
16
import java .util .concurrent .locks .Lock ;
33
17
import java .util .concurrent .locks .ReentrantLock ;
@@ -43,11 +27,15 @@ public class MainPage extends Activity {
43
27
static Lock lock = new ReentrantLock ();
44
28
static Condition condition = lock .newCondition ();
45
29
static boolean flag = false ;
30
+ private static final int REQUEST_PACKAGE_USAGE_STATS_PERMISSION = 1010 ;
46
31
47
32
@ Override
48
33
protected void onCreate (Bundle savedInstanceState ) {
49
34
super .onCreate (savedInstanceState );
50
35
setContentView (R .layout .activity_main );
36
+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
37
+ checkPermission (REQUEST_PACKAGE_USAGE_STATS_PERMISSION );
38
+ }
51
39
Utils .checkSignInServiceEnabled (this );
52
40
appListView = findViewById (R .id .appListView );
53
41
Button start = findViewById (R .id .button );
@@ -60,6 +48,30 @@ public void onClick(View arg0) {
60
48
});
61
49
}
62
50
51
+ private void checkPermission (int requestCode ) {
52
+ if (requestCode == REQUEST_PACKAGE_USAGE_STATS_PERMISSION ) {
53
+ if (!hasPermission ()) {
54
+ //如果用户没有开启"可访问使用记录",则跳转到该设置项并提醒用户打开
55
+ Utils .showToast ("\" 签到助手\" 提示:\n 请开启\" 可访问使用记录\" 权限" , this );
56
+ startActivityForResult (
57
+ new Intent (Settings .ACTION_USAGE_ACCESS_SETTINGS ),
58
+ REQUEST_PACKAGE_USAGE_STATS_PERMISSION );
59
+ }
60
+ }
61
+ }
62
+
63
+ //检测用户是否对本app开启了“Apps with usage access”权限
64
+ private boolean hasPermission () {
65
+ AppOpsManager appOps = (AppOpsManager )
66
+ getSystemService (Context .APP_OPS_SERVICE );
67
+ int mode = 0 ;
68
+ if (Build .VERSION .SDK_INT > Build .VERSION_CODES .KITKAT ) {
69
+ mode = appOps .checkOpNoThrow (AppOpsManager .OPSTR_GET_USAGE_STATS ,
70
+ android .os .Process .myUid (), getPackageName ());
71
+ }
72
+ return mode == AppOpsManager .MODE_ALLOWED ;
73
+ }
74
+
63
75
class SignInThread extends Thread {
64
76
@ Override
65
77
public void run () {
@@ -92,7 +104,6 @@ private void autoSignIn(AppInfo info) {
92
104
try {
93
105
autoLaunch (info .packageName );
94
106
condition .await ();
95
-
96
107
} catch (InterruptedException e ) {
97
108
e .printStackTrace ();
98
109
}
0 commit comments