Вне зависимости от того, смените вы или нет приложение по умолчанию, диалог на доступ к системной функции всё равно будет.
Особенности разрешений можете почитать
здесь.
Попробуй дать сделать приложение "Администратором устройства".
Давно делал систему контроля корпоративных устройств с возможностью удалённо через наш web-интерфейс сбрасывать пароли и полностью очищать данные. Решением была такая возможность.
В AndroidManifest:
<uses-feature
android:name="android.software.device_admin"
android:required="true"/>
<application
.........
<receiver
android:name=".Receiver.AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.app.action.ACTION_PASSWORD_CHANGED"/>
<action android:name="android.app.action.ACTION_PASSWORD_FAILED"/>
<action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
<action android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<action android:name="android.permission.WRITE_SETTINGS" />
</intent-filter>
</receiver>
В .Receiver.AdminReceiver.java:
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public void onEnabled(Context ctxt, Intent intent) {
ComponentName cn=new ComponentName(ctxt, AdminReceiver.class);
DevicePolicyManager mgr=
(DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);
mgr.setPasswordQuality(cn,
DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
onPasswordChanged(ctxt, intent);
}
@Override
public void onPasswordChanged(Context ctxt, Intent intent) {
DevicePolicyManager mgr=
(DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);
String msgId = "";
if (mgr.isActivePasswordSufficient()) {
msgId="Ok";
}
else {
msgId="Fail";
}
Toast.makeText(ctxt, msgId, Toast.LENGTH_LONG).show();
}
@Override
public void onPasswordFailed(Context ctxt, Intent intent) {
}
@Override
public void onPasswordSucceeded(Context ctxt, Intent intent) {
}
}
Создайте "
res/xml/device_admin.xml" и в него положите:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
</uses-policies>
</device-admin>
В теге "intent-filter" указываются привилегии, полный список их можешь найти в Гугл.
После установки приложения нужно зайти в Настройки->Безопасность->Администраторы устройства->Включить приложение.
Соответственно, в AdminReceiver.java нужно будет подстроить под ваши нужды.