質問編集履歴

5

見やすく変更

2017/07/31 16:56

投稿

atatatatata
atatatatata

スコア77

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  次の他のpermissionを許可しようとすると
10
10
 
11
- overlayの 「画面オーバーレイを検出」というポップが出てきます。
11
+ ##overlayの 「画面オーバーレイを検出」というポップが出てきます。
12
12
 
13
13
  どうすればいいのでしょうか?
14
14
 
@@ -136,9 +136,7 @@
136
136
 
137
137
  ```
138
138
 
139
- 設定画面の「他のアプリの上に重ねて描画することを許可」という画面がonになっている状態で
139
+ ##設定画面の「他のアプリの上に重ねて描画することを許可」という画面がonになっている状態で「画面オーバーレイを検出」というポップが出てきます。
140
-
141
- 「画面オーバーレイを検出」というポップが出てきます。
142
140
 
143
141
  もちろん、そのボップをクリックして、アプリを選択して、設定画面を押しても、
144
142
 
@@ -150,9 +148,9 @@
150
148
 
151
149
 
152
150
 
153
- //このサイトにこのように書いてあったのですが、
151
+ ##//このサイトにhttps://stackoverflow.com/questions/32061934/permission-from-manifest-doesnt-work-in-android-6
154
152
 
155
- https://stackoverflow.com/questions/32061934/permission-from-manifest-doesnt-work-in-android-6
153
+ に、このように書いてあったのですが
156
154
 
157
155
 
158
156
 
@@ -160,6 +158,4 @@
160
158
 
161
159
 
162
160
 
163
- イベントコールバックなどが必要ということでしょうか?
164
-
165
- 同じActivityないで、変更した値を取得することはできないのでしょうか?
161
+ ##イベントコールバックなどが必要ということでしょうか?同じActivityないで、変更した値を取得することはできないのでしょうか?

4

説明の追加

2017/07/31 16:56

投稿

atatatatata
atatatatata

スコア77

test CHANGED
File without changes
test CHANGED
@@ -147,3 +147,19 @@
147
147
 
148
148
 
149
149
  onなのになぜ、ポップが出るのでしょうか?
150
+
151
+
152
+
153
+ //このサイトにこのように書いてあったのですが、
154
+
155
+ https://stackoverflow.com/questions/32061934/permission-from-manifest-doesnt-work-in-android-6
156
+
157
+
158
+
159
+ コンテキスト#startActivityまたはサービス内で管理できるフラグメントを介して開始できるアクティビティを実装する必要があるかもしれません。次に、このアクティビティーまたはフラグメント内で、パーミッションを検査します。アクティビティやフラグメントからアクセス許可の結果を受け取る場合は、イベントコールバックの仕組み(バインダーベースのIPCメッセージングやLocalBroadcastManagerなど)を実装するための追加の手順が必要な場合があります。
160
+
161
+
162
+
163
+ イベントコールバックなどが必要ということでしょうか?
164
+
165
+ 同じActivityないで、変更した値を取得することはできないのでしょうか?

3

説明の追加

2017/07/31 16:54

投稿

atatatatata
atatatatata

スコア77

test CHANGED
File without changes
test CHANGED
@@ -135,3 +135,15 @@
135
135
  }
136
136
 
137
137
  ```
138
+
139
+ 設定画面の「他のアプリの上に重ねて描画することを許可」という画面がonになっている状態で
140
+
141
+ 「画面オーバーレイを検出」というポップが出てきます。
142
+
143
+ もちろん、そのボップをクリックして、アプリを選択して、設定画面を押しても、
144
+
145
+ 設定画面の「他のアプリの上に重ねて描画することを許可」という画面がonになっています。
146
+
147
+
148
+
149
+ onなのになぜ、ポップが出るのでしょうか?

2

余計なtoastとかを省いたコードを書いた

2017/07/31 16:06

投稿

atatatatata
atatatatata

スコア77

test CHANGED
File without changes
test CHANGED
@@ -18,12 +18,6 @@
18
18
 
19
19
  ```java
20
20
 
21
- public class CheckOverlayActivity extends Activity {
22
-
23
-
24
-
25
- private final int OVERLAY_PERMISSION_REQ_CODE = 20;
26
-
27
21
 
28
22
 
29
23
  @Override
@@ -33,8 +27,6 @@
33
27
  super.onCreate(savedInstanceState);
34
28
 
35
29
  setContentView(R.layout.activity_check_overlay);
36
-
37
- Log.d("MainActivity", "onCreate()");
38
30
 
39
31
 
40
32
 
@@ -66,21 +58,11 @@
66
58
 
67
59
 
68
60
 
69
- Toast toast = Toast.makeText(this, "すでに許可されてた", Toast.LENGTH_SHORT);
70
-
71
- toast.show();
72
-
73
-
74
-
75
61
  locationActivity();
76
62
 
77
63
 
78
64
 
79
65
  }else{
80
-
81
- Toast toast = Toast.makeText(this, "2、requestOverlayPermission()を呼ぶ", Toast.LENGTH_SHORT);
82
-
83
- toast.show();
84
66
 
85
67
  requestOverlayPermission();
86
68
 
@@ -93,10 +75,6 @@
93
75
 
94
76
 
95
77
  private void requestOverlayPermission(){
96
-
97
- Toast toast = Toast.makeText(this, "3、requestOverlayPermission()呼ばれた", Toast.LENGTH_SHORT);
98
-
99
- toast.show();
100
78
 
101
79
  if (Build.VERSION.SDK_INT < 23) {
102
80
 
@@ -118,21 +96,11 @@
118
96
 
119
97
 
120
98
 
121
-
122
-
123
99
  // 結果の受け取り
124
100
 
125
101
  @Override
126
102
 
127
103
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
128
-
129
-
130
-
131
- Toast toast = Toast.makeText(this, "4、結果の受け取り", Toast.LENGTH_SHORT);
132
-
133
- toast.show();
134
-
135
-
136
104
 
137
105
 
138
106
 
@@ -144,13 +112,9 @@
144
112
 
145
113
  locationActivity();
146
114
 
147
-
148
-
149
115
  }else{
150
116
 
151
- Toast toast1 = Toast.makeText(this, "許可をしないと進めません", Toast.LENGTH_SHORT);
117
+
152
-
153
- toast1.show();
154
118
 
155
119
  }
156
120
 
@@ -160,15 +124,7 @@
160
124
 
161
125
 
162
126
 
163
-
164
-
165
- // Intent でLocation
166
-
167
127
  private void locationActivity() {
168
-
169
- Toast toast = Toast.makeText(this, "5、次の画面へ", Toast.LENGTH_SHORT);
170
-
171
- toast.show();
172
128
 
173
129
  Intent intent = new Intent(getApplication(), CheckStorageActivity.class);
174
130
 
@@ -178,8 +134,4 @@
178
134
 
179
135
  }
180
136
 
181
-
182
-
183
-
184
-
185
137
  ```

1

コードの間違い

2017/07/31 15:44

投稿

atatatatata
atatatatata

スコア77

test CHANGED
File without changes
test CHANGED
@@ -18,33 +18,99 @@
18
18
 
19
19
  ```java
20
20
 
21
- public class CheckGpsActivity extends Activity {
21
+ public class CheckOverlayActivity extends Activity {
22
-
23
- private final int REQUEST_PERMISSION = 10;
24
22
 
25
23
 
26
24
 
27
- @Override
28
-
29
- protected void onCreate(Bundle savedInstanceState) {
25
+ private final int OVERLAY_PERMISSION_REQ_CODE = 20;
30
-
31
- super.onCreate(savedInstanceState);
32
-
33
- setContentView(R.layout.activity_check_gps);
34
-
35
- Log.d("MainActivity", "onCreate()");
36
26
 
37
27
 
38
28
 
39
- if(Build.VERSION.SDK_INT >= 23){
29
+ @Override
40
30
 
31
+ protected void onCreate(Bundle savedInstanceState) {
32
+
33
+ super.onCreate(savedInstanceState);
34
+
35
+ setContentView(R.layout.activity_check_overlay);
36
+
37
+ Log.d("MainActivity", "onCreate()");
38
+
39
+
40
+
41
+ if (Build.VERSION.SDK_INT >= 23) {
42
+
43
+ Toast toast = Toast.makeText(this, "1、checkOverlayPermissin()を呼ぶ", Toast.LENGTH_SHORT);
44
+
45
+ toast.show();
46
+
41
- checkPermission();
47
+ checkOverlayPermission();
48
+
49
+ } else {
50
+
51
+ locationActivity();
52
+
53
+ }
54
+
55
+ }
56
+
57
+
58
+
59
+
60
+
61
+ public void checkOverlayPermission() {
62
+
63
+
64
+
65
+ if (Settings.canDrawOverlays(this)) {
66
+
67
+
68
+
69
+ Toast toast = Toast.makeText(this, "すでに許可されてた", Toast.LENGTH_SHORT);
70
+
71
+ toast.show();
72
+
73
+
74
+
75
+ locationActivity();
76
+
77
+
78
+
79
+ }else{
80
+
81
+ Toast toast = Toast.makeText(this, "2、requestOverlayPermission()を呼ぶ", Toast.LENGTH_SHORT);
82
+
83
+ toast.show();
84
+
85
+ requestOverlayPermission();
42
86
 
43
87
  }
44
88
 
45
- else{
89
+ }
46
90
 
91
+
92
+
93
+
94
+
95
+ private void requestOverlayPermission(){
96
+
97
+ Toast toast = Toast.makeText(this, "3、requestOverlayPermission()呼ばれた", Toast.LENGTH_SHORT);
98
+
47
- locationActivity();
99
+ toast.show();
100
+
101
+ if (Build.VERSION.SDK_INT < 23) {
102
+
103
+ } else {
104
+
105
+ /* android 6 以上 */
106
+
107
+ if (!Settings.canDrawOverlays(this)) {
108
+
109
+ Intent intent2 = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
110
+
111
+ startActivityForResult(intent2, OVERLAY_PERMISSION_REQ_CODE);
112
+
113
+ }
48
114
 
49
115
  }
50
116
 
@@ -54,125 +120,57 @@
54
120
 
55
121
 
56
122
 
57
- public void repetition(){
123
+ // 結果の受け取り
58
124
 
59
- if(Build.VERSION.SDK_INT >= 23){
125
+ @Override
60
126
 
61
- checkPermission();
127
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
62
128
 
63
- }
64
129
 
65
- else{
66
130
 
67
- locationActivity();
131
+ Toast toast = Toast.makeText(this, "4、結果の受け取り", Toast.LENGTH_SHORT);
68
132
 
133
+ toast.show();
134
+
135
+
136
+
137
+
138
+
139
+ if(requestCode==OVERLAY_PERMISSION_REQ_CODE){
140
+
141
+
142
+
143
+ if (Settings.canDrawOverlays(this)) {
144
+
145
+ locationActivity();
146
+
147
+
148
+
149
+ }else{
150
+
151
+ Toast toast1 = Toast.makeText(this, "許可をしないと進めません", Toast.LENGTH_SHORT);
152
+
153
+ toast1.show();
154
+
69
- }
155
+ }
156
+
157
+ }
70
158
 
71
159
  }
72
160
 
73
161
 
74
162
 
75
- // 位置情報許可の確認
76
-
77
- public void checkPermission() {
78
-
79
- // 既に許可している
80
-
81
- if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED){
82
-
83
- locationActivity();
84
-
85
- }
86
-
87
- // 拒否していた場合
88
-
89
- else{
90
-
91
- requestLocationPermission();
92
-
93
- }
94
-
95
- }
96
163
 
97
164
 
98
-
99
- // 許可を求める
100
-
101
- private void requestLocationPermission() {
102
-
103
- if (ActivityCompat.shouldShowRequestPermissionRationale(this,
104
-
105
- Manifest.permission.ACCESS_FINE_LOCATION)) {
106
-
107
- ActivityCompat.requestPermissions(CheckGpsActivity.this,
108
-
109
- new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION);
110
-
111
-
112
-
113
- } else {
114
-
115
- Toast toast = Toast.makeText(this, "許可してください", Toast.LENGTH_SHORT);
116
-
117
- toast.show();
118
-
119
-
120
-
121
- ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, REQUEST_PERMISSION);
122
-
123
-
124
-
125
- }
126
-
127
- }
128
-
129
-
130
-
131
- // 結果の受け取り
132
-
133
- @Override
134
-
135
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
136
-
137
- if (requestCode == REQUEST_PERMISSION) {
138
-
139
- // 使用が許可された
140
-
141
- if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
142
-
143
-
144
-
145
- locationActivity();
146
-
147
- return;
148
-
149
-
150
-
151
- } else {
152
-
153
- // それも拒否された時の対応
165
+ // Intent Location
154
-
155
- Toast toast = Toast.makeText(this, "許可をしてください", Toast.LENGTH_SHORT);
156
-
157
- toast.show();
158
-
159
-
160
-
161
-
162
-
163
- repetition();
164
-
165
- }
166
-
167
- }
168
-
169
- }
170
-
171
-
172
166
 
173
167
  private void locationActivity() {
174
168
 
169
+ Toast toast = Toast.makeText(this, "5、次の画面へ", Toast.LENGTH_SHORT);
170
+
171
+ toast.show();
172
+
175
- Intent intent = new Intent(getApplication(), GpsGetActivity.class);
173
+ Intent intent = new Intent(getApplication(), CheckStorageActivity.class);
176
174
 
177
175
  startActivity(intent);
178
176
 
@@ -180,4 +178,8 @@
180
178
 
181
179
  }
182
180
 
181
+
182
+
183
+
184
+
183
185
  ```