回答編集履歴

2

ご回答を修正

2018/11/08 10:15

投稿

退会済みユーザー
test CHANGED
@@ -1,8 +1,72 @@
1
- intentスキームURLを用れば実現できそす。
1
+ Web側みで対応するのは難しに思えます。
2
2
 
3
3
 
4
4
 
5
+ もし、アプリ側を修正してもよいのであれば、`shouldOverrideUrlLoading()`を独自実装した`WebViewClient`を`WebView`に設定することにより、実現できます。
6
+
7
+
8
+
9
+ ```Java
10
+
11
+ public class MyWebViewClient extends WebViewClient {
12
+
13
+
14
+
15
+ @Override
16
+
17
+ public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
18
+
19
+ Uri uri = request.getUri();
20
+
21
+ String uriPath = uri.getPath();
22
+
23
+
24
+
25
+ if(!uriPath.startsWith("《サイトのルートURL》")){
26
+
27
+ Intent intent = new Intent(Intent.ACTION_VIEW, uri)
28
+
29
+ view.getContext().startActivity(intent);
30
+
31
+ return true;
32
+
33
+ }
34
+
35
+
36
+
37
+ return false;
38
+
39
+ }
40
+
41
+ }
42
+
43
+ ```
44
+
45
+
46
+
47
+ ```Java
48
+
49
+ //WebViewを表示するアクティビティ内
50
+
51
+ webView.setWebViewClient(new MyWebViewClient());
52
+
53
+ ```
54
+
55
+
56
+
57
+ ---
58
+
59
+ 以下は、誤回答です。
60
+
61
+ Android版Chromeであれば、下記のように動作しますが、WebViewでは動作しないようです。動作させるには、前述のように`shouldOverrideUrlLoading()`で制御する必要があります。
62
+
63
+
64
+
65
+ ~~intentスキームのURLを用いれば実現できそうです。~~
66
+
67
+
68
+
5
- 次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。
69
+ ~~次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。~~
6
70
 
7
71
  ```
8
72
 
@@ -12,7 +76,7 @@
12
76
 
13
77
 
14
78
 
15
- 例えば、この質問の場合、次のように指定すればOKです。
79
+ ~~例えば、この質問の場合、次のように指定すればOKです。~~
16
80
 
17
81
  ``` html
18
82
 
@@ -22,15 +86,15 @@
22
86
 
23
87
 
24
88
 
25
- ただ、`<a>`タグにURLを直接指定すると、通常のブラウザで遷移できなくなってしまいます。なので、通常のブラウザも考慮する場合、何らかの方法でAndroidアプリからのアクセスであるか判別し、遷移先を制御する必要があります。
89
+ ~~ただ、`<a>`タグにURLを直接指定すると、通常のブラウザで遷移できなくなってしまいます。なので、通常のブラウザも考慮する場合、何らかの方法でAndroidアプリからのアクセスであるか判別し、遷移先を制御する必要があります。~~
26
90
 
27
91
 
28
92
 
29
- Androidアプリからのアクセスであるか判別するには、JavaScriptでユーザーエージェントによる判別を行うがお手軽です。ただ、一部のAndroid端末で、内蔵ブラウザとWebViewのユーザーエージェントが同じであるため([参考2](https://www.au.com/developer/android/kishu/ua/))、正確な判定ができません。
93
+ ~~Androidアプリからのアクセスであるか判別するには、JavaScriptでユーザーエージェントによる判別を行うがお手軽です。ただ、一部のAndroid端末で、内蔵ブラウザとWebViewのユーザーエージェントが同じであるため([参考2](https://www.au.com/developer/android/kishu/ua/))、正確な判定ができません。~~
30
94
 
31
95
 
32
96
 
33
- 質問の前提を破ることになりますが、通常のブラウザも考慮する場合、AndroidアプリのWebViewのユーザーエージェントに独自の文字列を付与するなどの対応が必要かもしれません。
97
+ ~~質問の前提を破ることになりますが、通常のブラウザも考慮する場合、AndroidアプリのWebViewのユーザーエージェントに独自の文字列を付与するなどの対応が必要かもしれません。~~
34
98
 
35
99
 
36
100
 

1

VIEWアクションを用いた方法に変更

2018/11/08 10:15

投稿

退会済みユーザー
test CHANGED
@@ -1,12 +1,12 @@
1
- 遷移先をChromeで開くのであれば、intentスキームのURLを用いれば実現できそうです。
1
+ intentスキームのURLを用いれば実現できそうです。
2
2
 
3
3
 
4
4
 
5
- 次の形式のURLを、AndroidのWebViewで開こうとすると、Chromeが起動します。
5
+ 次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。
6
6
 
7
7
  ```
8
8
 
9
- intent://《遷移先URL(スキーム除く)》#Intent;scheme=《遷移先URLのスキーム》;package=com.android.chrome;end
9
+ intent://《遷移先URL(スキーム除く)》#Intent;scheme=《遷移先URLのスキーム》;action=android.intent.action.VIEW;end
10
10
 
11
11
  ```
12
12
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  ``` html
18
18
 
19
- <a href="intent://teratail.com/questions/156743#Intent;scheme=https;package=com.android.chrome;end">外部リンク</a>
19
+ <a href="intent://teratail.com/questions/156743#Intent;scheme=https;action=android.intent.action.VIEW;end">外部リンク</a>
20
20
 
21
21
  ```
22
22