自分が作成したアンドロイドアプリでデフォルトブラウザを起動する機能があります。Androidバージョン4.3以前のバージョンでブラウザをうまく起動したが、ギャラクシーnote3(SCL22)などの機種で異常が発生しました。
アプリからブラウザを起動するソースコードの抜粋:
Intent i = new Intent();
i.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
i.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse("http://web.matao.me/android");
i.setDataAndType(uri, "text/html");
act.startActivity(i);
エラー情報:
Unable to find explicit activity class {com.android.browser/com.android.browser.BrowserActivity}; have you declared this activity in your AndroidManifest.xml?
エラー情報からを見ると、BrowserActivityを認識できません。
いままでのandroidバージョンがこのようなエラーがなかったのに、ギャラクシーNOTE3は異常が発生!!
もちろん、サムソン製スマホはカスタマイズが多くて障害発生してでおかしくないと思う。多くの場合僕はこのような障害は対応しませんが、ここで解決方法を記録します。ほかの方は参考できれば嬉しいです。
先ず、Note3でブラウザ起動ためのパケージ名とクラス名を確認するコード:
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
PackageManager packageManager = act.getPackageManager();
Uri uri = Uri.parse("http://web.matao.me/android");
browserIntent.setDataAndType(uri, "text/html");
List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
for (ResolveInfo resolveInfo : list) {
String pName = resolveInfo.activityInfo.packageName;
String actName = resolveInfo.activityInfo.name;
System.out.println("パケージ名:"+pName + " クラス名:"+actName);
}
僕は確認した結果:
つまり、androidスマホでブラウザ起動するためのライブラリを変わった。通常の場合、com.android.browser.BrowserActivityを使ってブラウザ起動に対して、Note3は
com.sec.android.app.sbrowser.SBrowserMainActivityを使ってデフォルトブラウザを起動する。
けっこう厄介な変更点ですね。
それを知ってたら、対策は簡単です。
i.setComponent(new ComponentName("com.sec.android.app.sbrowser", "com.sec.android.app.sbrowser.SBrowserMainActivity"));
を使ってブラウザを起動する。
このアンドロイドアプリ開発ブログは、あくまで僕の個人ブログに移行するから、詳しく説明は
web.matao.me/androidへ参考してください。
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
コメントする