10

Android ブラウザーでローカルの HTML ファイルを開こうとすると、奇妙なエラーが発生します。発生するエラーは、アクティビティが見つからないという例外です。

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.browser/com.android.browser.BrowserActivity}; have you declared this activity in your AndroidManifest.xml?

私にとって本当に奇妙なのは、このエラーがすべてのデバイスで発生するわけではないという事実です。次のデバイスでのみ表示されます。

  • サムスン ギャラクシー ネクサス I (4.1.1)
  • サムスン ギャラクシー ネクサス II (4.1.1)
  • ソニー タブレット S (4.0.3)

次のデバイスでコードを正常にテストしました:

  • サムスン ギャラクシー SI (4.1.1)
  • サムスンギャラクシー S III
  • HTC One X
  • HTC デザイア S
  • サムスン ギャラクシー S プラス (2.3.3)
  • サムスン ギャラクシー タブ 10.1N
  • 2.3.3 から 4.1.0 までの Android バージョンの AVD

最後に、これは HTML を開くために使用しているコードです。Android ブラウザでファイルを開きます。いくつかの行を除外して、このコードのいくつかの順列をテストしましたが、すべて同じ効果があります。コンポーネントまたはクラスを設定するとすぐに、上記の例外が発生します。

Uri uri = Uri.parse(filePath);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
context.startActivity(browserIntent);

私も試してみました

browserIntent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");

それ以外の

browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));

しかし、同じ効果で...

なぜこれが起こっているのか、誰かが考えていますか? これについて何日も検索しましたが、問題を解決するものは何も見つかりませんでした...

事前にどうもありがとう、乾杯

4

5 に答える 5

14

com.android.browser.BrowserActivityこれらのデバイスのようなアクティビティがない可能性があるため、可能です。デバイス メーカーによって、ネイティブブラウザ アプリケーションの実装方法(アクティビティ名とパッケージ名) が異なります。

したがって、考えられる解決策は、

を使用するPackageMangerIntent、特定のインテント カテゴリを確認できIntent.CATEGORY_BROWSABLEます。利用可能な場合は、任意のアプリケーションで利用可能であり、そのアプリケーションを ComponentName に設定します。

または、コンポーネント名を指定しない、のように、

browserIntent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));

このページを開くアクティビティをユーザーが選択できるようにします。

だからただのコードは、

Uri uri = Uri.parse(filePath);
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setDataAndType(uri, "text/html");
browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
context.startActivity(browserIntent);
于 2012-08-01T08:43:34.753 に答える
7

一部のシナリオでは、ユーザーに選択させるのではなく、ネイティブブラウザーを使用したい場合があります。これは、別のパッケージ名で ActivityNotFoundException を回避する方法です。これが役立つことを願っています:)

Intent browserIntent = new Intent(Intent.ACTION_VIEW);
PackageManager packageManager = currentActivity.getPackageManager();
Uri uri = Uri.parse(url);
browserIntent.setDataAndType(uri, "text/html");
List<ResolveInfo> list = packageManager.queryIntentActivities(browserIntent, 0);
for (ResolveInfo resolveInfo : list) {
    String activityName = resolveInfo.activityInfo.name;
    if (activityName.contains("BrowserActivity")) {
        browserIntent =
                packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
        ComponentName comp =
                new ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name);
        browserIntent.setAction(Intent.ACTION_VIEW);
        browserIntent.addCategory(Intent.CATEGORY_BROWSABLE);
        browserIntent.setComponent(comp);
        browserIntent.setData(uri);
    }
}
于 2013-02-06T07:25:38.767 に答える
1

なぜコンポーネントを指定するのですか? 意図の外に置いておけば問題ありません。アクション、カテゴリ、およびデータ/タイプで十分です。

于 2012-08-01T08:43:42.683 に答える