2

によってスローされた例外を処理する安全な方法はありsuper.onCreate(savedInstanceState)ますか?

非常に少数のユーザーがこのエラーに遭遇しています

java.lang.NoClassDefFoundError - android.security.MessageDigest

原因はこの質問で説明されていますが、基本的onCreateには MapActivity クラスに対してNoClassDefFoundError. 状態を事前に検出しても、将来の証明にならない可能性があることを懸念しています。

私のクラス(MapActivityを拡張する)の最も安全な解決策は、NoClassDefFoundError代わりにGoogleマップへのURLをキャッチして起動することだと思いました。

    try {            
        super.onCreate(savedInstanceState);
    } catch (NoClassDefFoundError err) {
        StringBuilder url = new StringBuilder(
                "http://maps.google.com/maps?q=").append(latitude)
                .append(",").append(longitude).append("&z=18");

        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url.toString()));
        startActivity(i);
        finish();
        return;
    }

SuperNotCalledExceptionただし、 が発生したときにコードがクラッシュするのではないかと心配していNoClassDefFoundErrorます。

super.onCreate の呼び出しで例外/エラーを処理する安全な方法はありますか?

4

2 に答える 2

3

非常に少数のユーザーがこのエラーに遭遇しています

彼らは、Google マップ サブシステムの海賊版を実行しているユーザーです。Google マップは Android のすべてのバージョンで問題なく動作し、ライセンシーは適切なバージョンを入手できます。ただし、知的障害のある海賊は、新しいデバイスで古い海賊版のマップ バイナリ セットを使用することがあり、この問題が発生します。

ただし、NoClassDefFoundError が発生したときにコードが SuperNotCalledException でクラッシュするのではないかと心配しています。

startActivity()欠落しているためにクラッシュする可能性があるため、これが実際に当てはまるか、または他の例外である可能性が十分にありますsuper.onCreate()。そうかもしれませんfinish()。とはいえ、ぜひお試しください。

super.onCreate の呼び出しで例外/エラーを処理する安全な方法はありますか?

一般的ではありません。

于 2013-03-14T23:28:07.570 に答える
0

MapActivity は廃止され、Google Play Services の一部である MapFragment が採用されました。この新しい API は下位互換性があると思います。

MapActivity を事前に検出することをお勧めします。MapActivity API は変更されないため、将来にわたって保証されます。MapFragment API には Google Play Services APK が必要です。ドキュメントには、それが存在することを確認し、存在しない場合はユーザーにプロンプ​​トを表示する方法が示されています。APK は Google Play ストアから入手でき、OTA によって入手可能になります。

于 2013-03-14T22:49:31.783 に答える