2016-12-14 4 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 앱으로 복원하고 싶은지 다시 묻습니다.

두 번째 대화 상자를 피하는 방법을 원합니다. 예를 들어 내 앱이 안드로이드 OS에 더 이상 기본 SMS 앱이 아니길 원한다는 것을 알려줌으로써 이전 앱이 자동으로 다시 작동하도록 할 수 있습니다. 안드로이드는 기본 SMS 응용 프로그램 인 동안 내 응용 프로그램을 제거하면 안드로이드는 사용자 입력이 필요없이 자동으로 이전 응용 프로그램으로 되돌아 갈 것이기 때문에 이것을 지원합니다. 어떤 방식 으로든 제거하지 않고 컨트롤을 제어하는이 동작을 복제 할 수 있습니까?

답변

4

기본 메시징 앱으로 사용하려면 앱에 매니페스트에 등록 된 특정 활성 구성 요소가 있어야합니다. 둘 중 하나를 사용 중지하면 앱이 부적격하게되며 시스템이 자동으로 기본값을 되돌려 야합니다. 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을 두 번째 인수로 사용하여 수행 할 수 있습니다.