2016-12-14 14 views
4

У меня есть приложение, которое требует временного доступа к SMS-сообщениям устройства. В KitKat и выше, этот доступ предоставляется только по умолчанию 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-приложения.

Я хотел бы, чтобы избежать второго диалога, возможно, когда мое приложение сообщит ОС Android, что оно больше не хочет быть стандартным SMS-приложением, так что предыдущее приложение может автоматически занять больше. Я знаю, что Android поддерживает это, потому что, если я удалю свое приложение, когда оно является стандартным SMS-приложением, Android автоматически вернется к предыдущему, без необходимости ввода пользователем. Любой способ реплицировать это поведение управления передачей без деинсталляции?

ответ

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 в качестве второго аргумента.

 Смежные вопросы

  • Нет связанных вопросов^_^