質問編集履歴

4

アプリのシステム変更への許可チェックを追加

2019/06/10 22:05

投稿

rick
rick

スコア18

test CHANGED
File without changes
test CHANGED
@@ -140,7 +140,9 @@
140
140
 
141
141
  }
142
142
 
143
-
143
+ init();
144
+
145
+ }
144
146
 
145
147
 
146
148
 
@@ -184,6 +186,54 @@
184
186
 
185
187
 
186
188
 
189
+ private void init() {
190
+
191
+ //request permissions
192
+
193
+ int CODE_WRITE_SETTINGS_PERMISSION = 6789;
194
+
195
+
196
+
197
+ boolean permission;
198
+
199
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
200
+
201
+ permission = Settings.System.canWrite(this);
202
+
203
+ } else {
204
+
205
+ permission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED;
206
+
207
+ }
208
+
209
+ if (permission) {
210
+
211
+ //Write allowed
212
+
213
+ } else {
214
+
215
+ //Write not allowed
216
+
217
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
218
+
219
+ Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
220
+
221
+ intent.setData(Uri.parse("package:" + this.getPackageName()));
222
+
223
+ this.startActivityForResult(intent, CODE_WRITE_SETTINGS_PERMISSION);
224
+
225
+ } else {
226
+
227
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_SETTINGS}, CODE_WRITE_SETTINGS_PERMISSION);
228
+
229
+ }
230
+
231
+ }
232
+
233
+ }
234
+
235
+
236
+
187
237
  private void networkChange(int request) {
188
238
 
189
239
  ConnectivityManager connectivityManager
@@ -356,4 +406,6 @@
356
406
 
357
407
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
358
408
 
409
+ <uses-permission android:name="android.permission.WRITE_SETTINGS" />
410
+
359
411
  ```

3

コードの追加

2019/06/10 22:05

投稿

rick
rick

スコア18

test CHANGED
File without changes
test CHANGED
@@ -91,3 +91,269 @@
91
91
  DownloadManagerクラスに、ファイルDLをする際、指定した通信でDLを許可するメソッドがあります。
92
92
 
93
93
  こちらも試してみましたが、mobileのみを許可したのにwi-fi接続でDLをしており、うまく動いてくれませんでした。
94
+
95
+
96
+
97
+ (2019/06/11 追記)
98
+
99
+ MainActivity.java
100
+
101
+ ```
102
+
103
+ private ConnectivityManager.NetworkCallback mCallback = null;
104
+
105
+
106
+
107
+ @Override
108
+
109
+ protected void onCreate(Bundle savedInstanceState) {
110
+
111
+ button.setOnClickListener(new View.OnClickListener() {
112
+
113
+ @Override
114
+
115
+ public void onClick(View view) {
116
+
117
+ String res = initCheck();
118
+
119
+ switch (res) {
120
+
121
+ case "Wi-fi通信":
122
+
123
+ // モバイル通信リクエスト
124
+
125
+ networkChange(NetworkCapabilities.TRANSPORT_CELLULAR);
126
+
127
+ break;
128
+
129
+ case "モバイル通信":
130
+
131
+ // Wi-fi通信リクエスト
132
+
133
+ networkChange(NetworkCapabilities.TRANSPORT_WIFI);
134
+
135
+ break;
136
+
137
+ default:
138
+
139
+ break;
140
+
141
+ }
142
+
143
+
144
+
145
+
146
+
147
+ private String initCheck() {
148
+
149
+ ConnectivityManager connectivityManager
150
+
151
+ = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
152
+
153
+ Network[] allNetwork = connectivityManager.getAllNetworks();
154
+
155
+ String res = null;
156
+
157
+ for (Network network : allNetwork) {
158
+
159
+ NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
160
+
161
+ if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
162
+
163
+ // WiFi network
164
+
165
+ res = "Wi-fi通信";
166
+
167
+ } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
168
+
169
+ // Mobile network
170
+
171
+ res = "モバイル通信";
172
+
173
+ } else {
174
+
175
+ // Other network
176
+
177
+ res = "それ以外";
178
+
179
+ }
180
+
181
+ }
182
+
183
+ return res;
184
+
185
+
186
+
187
+ private void networkChange(int request) {
188
+
189
+ ConnectivityManager connectivityManager
190
+
191
+ = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
192
+
193
+
194
+
195
+ // リクエストしたいNetworkを取得するためにNetworkRequestを作成
196
+
197
+ NetworkRequest.Builder builder = new NetworkRequest.Builder();
198
+
199
+ // Networkの種類を指定
200
+
201
+ builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
202
+
203
+ // Transportタイプを指定
204
+
205
+ builder.addTransportType(request);
206
+
207
+ NetworkRequest networkRequest = builder.build();
208
+
209
+
210
+
211
+ // ネットワークリセット
212
+
213
+ resetDefaultNetwork(connectivityManager);
214
+
215
+ try {
216
+
217
+ Thread.sleep(1000);
218
+
219
+ } catch (InterruptedException e) {
220
+
221
+ }
222
+
223
+
224
+
225
+ mCallback = new NetworkChangeCallback(connectivityManager);
226
+
227
+ // NetworkRequestとNetworkCallbackを使ってNetworkをリクエストする
228
+
229
+ connectivityManager.requestNetwork(networkRequest, mCallback);
230
+
231
+ }
232
+
233
+
234
+
235
+ private void resetDefaultNetwork(ConnectivityManager manager) {
236
+
237
+ // すでにプロセスのネットワークが設定されている時はnullを設定する
238
+
239
+ if (manager.getBoundNetworkForProcess() != null) {
240
+
241
+ manager.bindProcessToNetwork(null);
242
+
243
+ }
244
+
245
+ // NetworkCallbackを設定している時はunregisterする
246
+
247
+ if (mCallback != null) {
248
+
249
+ try {
250
+
251
+ manager.unregisterNetworkCallback(mCallback);
252
+
253
+ mCallback = null;
254
+
255
+ } catch (IllegalArgumentException e) {
256
+
257
+ Log.e(TAG, e.getMessage());
258
+
259
+ }
260
+
261
+ }
262
+
263
+ }
264
+
265
+
266
+
267
+ /**
268
+
269
+ * 通信リクエスト後のコールバッククラス
270
+
271
+ */
272
+
273
+ private class NetworkChangeCallback extends ConnectivityManager.NetworkCallback {
274
+
275
+ ConnectivityManager mManager = null;
276
+
277
+
278
+
279
+ public NetworkChangeCallback(ConnectivityManager mConnectivityManager) {
280
+
281
+ mManager = mConnectivityManager;
282
+
283
+ }
284
+
285
+
286
+
287
+ @Override
288
+
289
+ public void onAvailable(Network network) {
290
+
291
+ super.onAvailable(network);
292
+
293
+ boolean result = mManager.bindProcessToNetwork(network);
294
+
295
+ if (!result) {
296
+
297
+ Log.e(TAG, "バインド失敗");
298
+
299
+ } else {
300
+
301
+ checkNetwork();
302
+
303
+ }
304
+
305
+ }
306
+
307
+ ・・・
308
+
309
+
310
+
311
+ private void checkNetwork() {
312
+
313
+ // 設定したいNetworkが使えるかは確認しておいていいと思います。
314
+
315
+ Network[] allNetwork = mManager.getAllNetworks();
316
+
317
+ Button button = findViewById(R.id.button_con_result);
318
+
319
+ for (Network network : allNetwork) {
320
+
321
+ NetworkCapabilities networkCapabilities = mManager.getNetworkCapabilities(network);
322
+
323
+ if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
324
+
325
+ // WiFi network
326
+
327
+ button.setText("Wi-fi通信");
328
+
329
+ } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
330
+
331
+ // Mobile network
332
+
333
+ button.setText("モバイル通信");
334
+
335
+ } else {
336
+
337
+ // Other network
338
+
339
+ button.setText("それ以外");
340
+
341
+ }
342
+
343
+ }
344
+
345
+ }
346
+
347
+ };
348
+
349
+ ```
350
+
351
+
352
+
353
+ AndroidManifest.xml
354
+
355
+ ```
356
+
357
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
358
+
359
+ ```

2

表を挿入

2019/06/10 21:29

投稿

rick
rick

スコア18

test CHANGED
File without changes
test CHANGED
@@ -12,31 +12,31 @@
12
12
 
13
13
  対象はSDKバージョン 28で、リクエストにはConectivityManagerクラスを使用しております。
14
14
 
15
- 現象は以下となります。(1回目のリクエストの)
15
+ 現象は以下となります。
16
16
 
17
- ---------------------------------------------------------------------------        
17
+ ||モバイル通信リクエスト後、アプリ内Webviewでサイト閲覧|→|Wi-fi通信リクエスト後、アプリ内Webviewでサイト閲覧|
18
18
 
19
-          モバイル通信リクエスト後、   →     Wi-fi通信リクエスト後、
19
+ |:--|:--:|:--:|--:|
20
20
 
21
-          アプリ内Webviewでサイト閲覧       アプリ内Webviewサイト閲覧
21
+ |モバイル通信量|通信量(想定通り)|→|通信量(想定通りはない)|
22
22
 
23
- モバイル通信量    アップ(想定通り)     →  アップ(想定通りではない。増えないでほしい)
24
-
25
- Wi-fi 通信量    変化なし(想定通り)       変化なし(想定通りではない。増えてほしい
23
+ |Wi-fi 通信量|変化なし(想定通り)|→|変化なし(想定通りではない)|
26
24
 
27
25
 
28
26
 
29
27
 
30
28
 
31
-          Wi-fi通信リクエスト後、         モバイル通信リクエスト後、
29
+ ||Wi-fi通信リクエスト後、アプリ内Webviewでサイト閲覧||モバイル通信リクエスト後、アプリ内Webviewでサイト閲覧|
32
30
 
33
-          アプリ内Webviewでサイト閲覧       アプリ内Webviewでサイト閲覧
31
+ |:--|:--:|:--:|--:|
34
32
 
35
- モバイル通信量    変化なし(想定通り)      変化なし(想定通りではない。増えてほしい 
33
+ |モバイル通信量|変化なし(想定通り)||変化なし(想定通りではない)|
36
34
 
37
- Wi-fi 通信量    アップ(想定通り)       アップ(想定通りではない。増えないでほしい
35
+ |Wi-fi 通信量|通信量アップ(想定通り)|→|通信量アップ(想定通りではない)|
38
36
 
39
- ---------------------------------------------------------------------------        
37
+
38
+
39
+        
40
40
 
41
41
 
42
42
 

1

2019/05/24 22:20

投稿

rick
rick

スコア18

test CHANGED
File without changes
test CHANGED
@@ -79,3 +79,15 @@
79
79
 
80
80
 
81
81
  何か解決案がありましたら、先生方にご教授頂ければと思っております。よろしくお願い致します。
82
+
83
+
84
+
85
+ (2019/05/22 追記)
86
+
87
+ やりたい事としては、ファイルのDLのみモバイル通信で行うことです。
88
+
89
+
90
+
91
+ DownloadManagerクラスに、ファイルDLをする際、指定した通信でDLを許可するメソッドがあります。
92
+
93
+ こちらも試してみましたが、mobileのみを許可したのにwi-fi接続でDLをしており、うまく動いてくれませんでした。