ProviderInstallerは、エミュレータ上で動作しないとキャッチ誤差があることを読んではありません

AndroidDev:

私のアプリケーションでは、私は、SSLサーバへとProviderInstallerをインストールするためのAPIの21未満Iの必要性のためにそれを可能にするために接続しています。以下は、私のコードのプレビューは次のとおりです。

if (Build.VERSION.SDK_INT < 21) {
     try {
      ProviderInstaller.installIfNeeded(this);

    } catch (Exception e) {

      //Crashes the app when accessing the getMessage
      Log.i("error", e.getMessage());
   }
 }

これは、API 16で、デバイス上でうまく動作しますが、それはAPI 16でエミュレータ上で作業をdoesntの私はアクセスしようとするとgetMessage()エラーが発生し、それが全体のアプリケーションがクラッシュします。

なぜないProviderInstaller.installIfNeeded(this)エミュレータ上の仕事は、およびアクセスするときにも、なぜアプリケーションがクラッシュしないe.getMessage()機能を?

a2en:

installIfNeeded2つの例外を投げることができるGooglePlayServicesRepairableExceptionし、GooglePlayServicesNotAvailableExceptionGoogle Playのサービスは、それぞれ、利用できないとき、彼らは、Googleのプレイサービスが最新でない場合、または有効な場合にスローされており、。おそらくエミュレータでGoogle Playのサービスに問題があります。

あなたのアクセスがいつ、アプリがクラッシュしgetmessage()、あなたがキャッチしていることを除いては、メッセージを持っていないためです。あなたは全体の例外だけではなく、例外のメッセージをログに記録する必要があります。あなたはのドキュメントからこれを確認することができますのgetMessage語ります

(このThrowableインスタンスの詳細メッセージ文字列ヌルであってもよいです)。

GooglePlayServicesRepairableExceptionの文書から、

これらのケースでは、クライアントコードは、ユーザーがインストールできるようになりますローカライズされたダイアログをユーザーに提供するアップデート、またはその他のGoogle Playのサービスを有効にするためにgetErrorDialog(android.app.Activity、int型、int型)と一緒にgetConnectionStatusCode()を使用することができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=171760&siteId=1