アプリから外部ページを開きたい場面って結構あります。
- アプリ内にプライバシーポリシーを表示したい
- アプリ容量を減らすために説明ページを用意したい
特にプライバシーポリシーは超重要。アプリ内表示も必須(?)になったようなので、隅っこでもいいのでリンク表示しておく必要があるみたいです。
そこで忘れないために、 IntentからWebページ表示するやり方&コード例 を紹介
難しいのかなと思ってたけど。複雑なコードなしで数行でいけます。
URLを Intent から開く基本的な書き方
その手順を大雑把に箇条書きすると・・・
- まず Intent のインスタンス作成
- アクションに ACTION_VIEW を設定
- あと setData から開きたいURLを指定
- あとは startActivity からブラウザ起動
手順にすると長いけど、コードはとても短いです。
例えば https://example.com/ というページを開きたい場合
▼ そのコード例はコチラ
1 2 3 4 5 6 7 |
/// ブラウザで開きたいURL String url = "https://example.com/"; /// ブラウザ起動でページ表示 Intent intent = new Intent( Intent.ACTION_VIEW ); intent.setData( Uri.parse(url) ); startActivity( intent ); |
たったこれだけ。驚くほど簡単ですね。
ちなみにWebページをよく開くなら、
次みたいに Activity内でメソッド化しておくと楽かもしれません。
1 2 3 4 5 6 |
private void openUrl( String url ) { /// ブラウザ起動でページ表示 Intent intent = new Intent( Intent.ACTION_VIEW ); intent.setData( Uri.parse(url) ); startActivity( intent ); } |
外部アプリを開くだけなので、パーミッションも特に必要ないはず
本当に数行のコードでいけるから簡単です。
ページが閉じられた後のコールバックを受け取るには
ページを開くだけなら、上で紹介したコードだけでいけます。
ただこの方法だと1つ問題点があって、
それがページが閉じられた時に結果が受け取れないこと
なので、ついでに 結果を受け取る方法 についても紹介したいと思います。
そのやり方は先ほどの手順を次のように改造するだけ
- まず Intent のインスタンス作成
- アクションに ACTION_VIEW を設定
- あと setData に開きたいURLを指定
- 最後に startActivityForResult を実行
- 結果を onActivityResult で受け取る
重要なのが最後の2つ
普通に起動するんじゃなくて、 1. startActivityResult から Intent を実行 ⇒ 2.その結果を onActivityResult をオーバーライドして受け取り みたいな実装が必要です。
実際のコード例はこんな感じ
1.まず Intent からブラウザ起動でURL開く(Acitivity内)
1 2 3 4 5 6 |
/// ブラウザで開きたいURL String url = "https://example.com/"; Intent intent = new Intent( Intent.ACTION_VIEW ); intent.setData( Uri.parse(url) ); startActivityForResult( intent, 12345 ); |
2.Activity内で onActivityResult オーバーライド
1 2 3 4 5 6 7 8 9 |
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Intent intent = getIntent(); switch ( requestCode ) { case 12345: /// ブラウザが閉じられた後の処理... break; } } |
上の例だとリクエストコードを
12345 と適当に設定してるけど、
Activity内で定数(
private final int な変数)として定義しておくと分かりやすくなるはず
アプリ内からページを開き、そのあと設定を保存したいときとかに便利です。
ここまでのまとめ
以上、Intentからウェブページを表示する方法でした。
特にプライバシーポリシーの場合、プレイストアの掲載情報に載せるだけじゃダメで、アプリ内に表示しないと警告とかくるみたいです。(昔はそれほど厳しくなかった気がする)
そういうリスクを回避するにも、この方法が役立つかもしれません。ではでは($・・)/~~~