私のアプリケーションでは、私は、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()
機能を?
installIfNeeded
2つの例外を投げることができるGooglePlayServicesRepairableException
し、GooglePlayServicesNotAvailableException
Google Playのサービスは、それぞれ、利用できないとき、彼らは、Googleのプレイサービスが最新でない場合、または有効な場合にスローされており、。おそらくエミュレータでGoogle Playのサービスに問題があります。
あなたのアクセスがいつ、アプリがクラッシュしgetmessage()
、あなたがキャッチしていることを除いては、メッセージを持っていないためです。あなたは全体の例外だけではなく、例外のメッセージをログに記録する必要があります。あなたはのドキュメントからこれを確認することができますのgetMessage語ります
(このThrowableインスタンスの詳細メッセージ文字列ヌルであってもよいです)。
GooglePlayServicesRepairableExceptionの文書から、
これらのケースでは、クライアントコードは、ユーザーがインストールできるようになりますローカライズされたダイアログをユーザーに提供するアップデート、またはその他のGoogle Playのサービスを有効にするためにgetErrorDialog(android.app.Activity、int型、int型)と一緒にgetConnectionStatusCode()を使用することができます。