У меня есть кнопка Switch
, которая при попытке сделать активным проверит, если приложение не является приложением по умолчанию, откройте Action.CONTENT_VIEW
и попросите сделать мое приложение браузером по умолчанию, но только при нажатии всегда.
Если по умолчанию используется другой браузер, откройте диалоговое окно, в котором есть несколько шагов, и отправьте меня на сброс настроек по умолчанию другого приложения, которое является браузером по умолчанию, и только если пользователь сбросит настройки по умолчанию, мое приложение будет браузером по умолчанию.
Проблема в том, что он не проверяет, является ли другое приложение браузером по умолчанию.
Я основан на этом ответе, он мне немного помогает, но совсем не помогает.
https://stackoverflow.com/a/47162845/9560126
Другой код, который я видел, находится по этой ссылке.
https://stackoverflow.com/a/23622337/9560126
Но проблема в том, что он открывает приложение напрямую, он не переходит в настройки приложения для сброса настроек по умолчанию
Ниже вы можете найти код.
public class SettingsActivity extends AppCompatActivity implements DialogInterface.OnClickListener {
switcherDefaultBrowser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!switcherDefaultBrowser.isChecked()) {
openDialog();
} else if (switcherDefaultBrowser.isChecked()) {
isMyLauncherDefault(getApplicationContext);
}
}
});
private void openDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
dialogBuilder.setNegativeButton(R.string.Cancel, this);
dialogBuilder.setTitle(R.string.SVDialogDefaultBrowserAppTitle);
dialogBuilder.setMessage(R.string.SVDialogDefaultBrowserAppMessage);
dialogBuilder.setPositiveButton(R.string.SVDialogDefaultBrowserAppBtnClear, this);
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
switcherDefaultBrowser.setChecked(true);
}
});
alertDialog.show();
}
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == -2) {
switcherDefaultBrowser.setChecked(true);
} else if(which == -1) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
}
}
boolean isMyLauncherDefault(Context context) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com"));
ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(browserIntent,PackageManager.MATCH_DEFAULT_ONLY);
String defaultBrowserPkg = null;
if (resolveInfo != null) {
if (resolveInfo.activityInfo != null) {
defaultBrowserPkg = resolveInfo.activityInfo.packageName;
if (!defaultBrowserPkg.equals("searchwith.smartbrowser")) {
Log.d("TAG", "isMyLauncherDefault: " + defaultBrowserPkg);
openDialog();
switcherDefaultBrowser.setChecked(false);
}
Log.d("TAG", "isMyLauncherDefault: " + defaultBrowserPkg);
}
}
Log.d("TAG2", "isMyLauncherDefault: " + TextUtils.equals(context.getPackageName(), defaultBrowserPkg));
return TextUtils.equals(context.getPackageName(), defaultBrowserPkg);
}
}