WebのURLを開こうとするとき、通常のAndroidであればデフォルトブラウザが設定されていなければ選択ダイアログが表示され、デフォルトブラウザが設定されていれば、そちらが開く。
しかし、IdeaPad A1ではなぜかデフォルトブラウザが標準ブラウザに固定されており、他のブラウザを開くためには、毎回標準ブラウザの「共有」から渡してやらなければいけない。
アプリケーションの設定からインストール済みのアプリケーションとして標準ブラウザを確認すると、「デフォルトでの起動」にある「設定の消去」ボタンがDisableされていて、デフォルトを解除できないようにされている。つまり、OSレベルで手が加えられている。
そもそも
他のアプリからURLでブラウザを起動する場合、AndroidOSの機能である「Intent(インテント)」という仕組みを使って、データを受け渡す。Intentはアプリ間での連携を行う際、呼び出す側が呼び出される側の機能を直接しらなくても受け渡しできるように共通化された仕組み。これを使うと、アプリ自体が通話関連の機能をもっていなくても、標準アプリの「通話」を呼び出して電話をかけたりすることができる。
URLの場合、一般的にはIntentで「このURLを誰か開いてください」と通知すると、デフォルトブラウザが設定されていればそのブラウザアプリに、設定されていなければ対話式ダイアログが呼び出される。
・・・まぁ、ここで俺が説明するより、よそで調べてもらった方がわかりやすいので・・・。
IdeaPad A1の場合、このデフォルトのアプリが標準ブラウザから変更できないようになっているというわけ。
Advanced Intent Filter
Advanced Intent Filter
ファイルパスに応じて開くアプリを自動選択し使い分けられる「Advanced Intent Filter」 | あんどろいどスマート
Advanced Intent Filterというアプリが存在する。これは2ちゃんねるのA1スレッドに紹介されていたのでためしてみたんだけど、すべての「View」系Intentを拾って、「共有」を仲介できるアプリとのこと。
もしかするとこれでうまくいくかな、と思ったんだけど、これでも反応せず、標準ブラウザが起動してしまう。ということは、デフォルトアプリが設定されている場合、このアプリでも横取りできず、デフォルト優先されるということか。
ファームウェアの状態から標準ブラウザをはずす
G'zOneでは標準ブラウザでよかったのだけど、画面の広いIdeaPadA1なので、複数のタブを渡り歩ける他のブラウザを常用したい。そこで、後述のリンク先にあるように、標準ブラウザをはずす方針ですすめてみた。
通常はroot権限を取得しないとはじめから提供されているsystem領域をイジることはできない。なので、普通に考えればroot権限を奪取して、そこからBrowser.apkをはずすことになるのだが、IdeaPad A1ではファームウェアアップデータは単なるzipファイルなので、こいつを直接イジってしまうことにした。
やり方は、フォントの投入と同じ要領でできた。どうせ同じsystem配下に入っているんだし。
- 7zipでファームウェアのzipファイルを開く。
- 内部のsystem.zipの中の「apk」ディレクトリ内にある「Browser.apk」を「Browser.apk_」にリネーム。
- 今までと同じようにファームウェアアップデート
以上でアプリケーション一覧から「ブラウザ」が消える。すっきり。
ただし、問題点が無いわけでもない。
他のブラウザだとうまくいかない場合でも、標準ブラウザだったら表示できる場合も結構ある。そういうときに、まったく標準ブラウザが使えない状況になっていると、いろいろと不便だったりする。
現状で困っているのは、SeesmicのOAuth認証でうまくアプリケーションに戻ってくれない点・・・これはSeesmic側の問題なのかもしれんが。
まぁ、ともかく、標準ブラウザを外したことで、予期せぬ問題が発生しうる可能性はある。この点をふまえて、あくまで自己責任でよろしくお願いしますよ、と。