2016-12-14 8 views
4

に戻します。キットカットでは、上、このアクセスは、デフォルトのSMSアプリに付与されたので、私は使用しています:は自動的に私は、デバイスのSMSへの一時的なアクセスを必要とするアプリを持っている以前のデフォルトのSMSアプリ

Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); 
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getPackageName()); 
startActivity(intent); 

これは、彼らが私のアプリは、デフォルトのSMSアプリになってみましょう場合、ユーザーに尋ねるダイアログが表示されます。ここまでは順調ですね。問題は、私のアプリがその操作を完了したら、彼らは彼らの既定のSMSアプリケーションとして以前のアプリケーションを復元する場合は、再度尋ねる必要があります。

私はおそらく、以前のアプリが自動的に再び引き継ぐことができるように私のアプリは、それはもはやデフォルトのSMSアプリであることを望んでAndroidのOSを教えてくれたことで、第二のダイアログを回避する方法をしたいと思います。私はAndroidがこれをサポートしていることを知っています。なぜなら、デフォルトのSMSアプリケーションである間に私のアプリケーションをアンインストールすれば、Androidはユーザー入力を必要とせずに自動的に前のバージョンに戻ります。アンインストールせずに制御を継承するこの動作を複製する方法はありますか?

答えて

4

デフォルトのメッセージングアプリであることが資格を得るために、あなたのアプリケーションは、マニフェストに登録され、特定の活性成分を持っている必要があります。いずれか1つを無効にすると、あなたのアプリは不適格になり、システムはデフォルトを自動的に元に戻すはずです。 PackageManager#setComponentEnabledSetting()メソッドを使用して、マニフェストに登録されたコンポーネントを無効にすることができます。

は、例えば、受信機は、あなたがSMS_DELIVERアクションのために登録している場合は、SmsReceiver命名さ:アプリが再びデフォルトとして設定することができる前に

getPackageManager() 
    .setComponentEnabledSetting(new ComponentName(this, SmsReceiver.class), 
           PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
           PackageManager.DONT_KILL_APP); 

明らかに、あなたはそのコンポーネントを再度有効にする必要がありますこれは、上記のメソッドをPackageManager.COMPONENT_ENABLED_STATE_ENABLEDを第2引数として呼び出して行うことができます。

関連する問題