如何解决Android RoleManager 为自己的包删除角色 RoleManager.ROLE_SMS
我有只备份和恢复短信的短信备份应用 所以当我恢复短信时,我需要设置默认的按摩应用程序。然后在恢复后我不需要保持默认的按摩应用程序。
所以我的问题是如何删除我的应用默认为按摩应用。 以及旧版 belove Android Q。
代码 -
fun saveSms(values: ContentValues) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val roleManager = getSystemService(RoleManager::class.java)
if (roleManager.isRoleAvailable(RoleManager.ROLE_SMS)) {
if (roleManager.isRoleHeld(RoleManager.ROLE_SMS)) {
contentResolver.insert(Telephony.Sms.CONTENT_URI,values)
} else {
val i = roleManager
.createRequestRoleIntent(RoleManager.ROLE_SMS)
smsRunnable = Runnable {
saveSms(values)
smsRunnable = null
}
startActivityForResult(i,5444)
}
}
return
}
if (Telephony.Sms.getDefaultSmsPackage(this) != packageName) {
val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,packageName)
smsRunnable = Runnable {
saveSms(values)
smsRunnable = null
}
startActivityForResult(intent,5444)
} else {
contentResolver.insert(Telephony.Sms.CONTENT_URI,values)
}
}
解决方法
对于 Android Q 之前的版本,我使用 SharedPreferences。
String appDefault = getSharedPreferences("default",MODE_PRIVATE).getString("appDefault","com.android.contacts");
String paquete = getPackageName();
String appCallerActual = getSystemService(TelecomManager.class).getDefaultDialerPackage();
String cambio = appCallerActual.equals(paquete) ? appDefault : paquete;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
RoleManager roleManager = (RoleManager) getSystemService(Context.ROLE_SERVICE);
Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
Log.d(TAG,"isRoleAvailable: " + roleManager.isRoleAvailable(RoleManager.ROLE_DIALER));
Log.d(TAG,"isRoleHeld: " + roleManager.isRoleHeld(RoleManager.ROLE_DIALER));
//HERE I CAN'T CHANGE TO OTHER APP,SORRY;
startActivityForResult(intent,CODE_REQUEST);
}else{
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,cambio);
startActivityForResult(intent,CODE_REQUEST);
}
在 Android Q 的情况下,我不能这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。