请求访问目录时,DocumentsUI 显示 "Anonymous" 应用程序
DocumentsUI shows "Anonymous" application when requesting access to directory
一位用户报告说,当通过 ACTION_OPEN_DOCUMENT_TREE 意图选择文件夹时,我的应用无法请求目录访问权限。
由于某种原因,它没有显示我的应用程序,而是“匿名”:
翻译:“允许 Anonymous 访问相机中的文件。这将允许 Anonymous 访问存储在相机中的当前和未来内容”。
用户在 Mi Note 10 lite 上有一个 MIUI 12 和 Android 11。
小米Note 10也是一样,没问题。
检查了 Android 源代码:
case TYPE_OEPN_TREE:
final Uri treeUri = mTarget.getTreeDocumentUri();
final BaseActivity activity = (BaseActivity) getActivity();
final String target = activity.getCurrentTitle();
final String text = getString(R.string.open_tree_dialog_title,
**getCallingAppName**(getActivity()), target);
message = getString(R.string.open_tree_dialog_message,
**getCallingAppName**(getActivity()), target);
builder.setTitle(text);
builder.setMessage(message);
builder.setPositiveButton(
R.string.allow,
(DialogInterface dialog, int id) -> {
pickResult.increaseActionCount();
mActions.finishPicking(treeUri);
});
break;
@NonNull
public static String getCallingAppName(Activity activity) {
final String anonymous = activity.getString(R.string.anonymous_application);
final String packageName = getCallingPackageName(activity);
if (TextUtils.isEmpty(packageName)) {
return anonymous;
}
final PackageManager pm = activity.getPackageManager();
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(packageName, 0);
} catch (final PackageManager.NameNotFoundException e) {
return anonymous;
}
CharSequence result = pm.getApplicationLabel(ai);
return TextUtils.isEmpty(result) ? anonymous : result.toString();
}
public static String getCallingPackageName(Activity activity) {
String callingPackage = activity.getCallingPackage();
// System apps can set the calling package name using an extra.
try {
ApplicationInfo info =
activity.getPackageManager().getApplicationInfo(callingPackage, 0);
if (isSystemApp(info) || isUpdatedSystemApp(info)) {
final String extra = activity.getIntent().getStringExtra(
Intent.EXTRA_PACKAGE_NAME);
if (extra != null && !TextUtils.isEmpty(extra)) {
callingPackage = extra;
}
}
} catch (NameNotFoundException e) {
// Couldn't lookup calling package info. This isn't really
// gonna happen, given that we're getting the name of the
// calling package from trusty old Activity.getCallingPackage.
// For that reason, we ignore this exception.
}
return callingPackage;
}
...而且似乎由于某种原因找不到我的包名。怎么可能发生?
让他安装我的其他应用程序之一,它也发生在那里。
然后让他从 Playstore (FX File Explorer) 安装另一个应用程序,但没有安装。
所以它特定于他的设备和我的应用程序。
原来是该用户在开发者设置中关闭了MIUI优化。
错误报告:συσκευη,εκδοση miui,Play 商店安装(alpha 1021)。关闭 MIUI 优化后无法指定 b ios 文件或指定游戏镜像目录。将它们重新打开可以解决问题,并且可以正常扫描目录。同样在允许文件夹访问的弹出窗口中,应用程序在我的系统上显示为“匿名”而不是 AetherSX2。一些开发人员在这里谈论同样的问题。
一位用户报告说,当通过 ACTION_OPEN_DOCUMENT_TREE 意图选择文件夹时,我的应用无法请求目录访问权限。 由于某种原因,它没有显示我的应用程序,而是“匿名”:
翻译:“允许 Anonymous 访问相机中的文件。这将允许 Anonymous 访问存储在相机中的当前和未来内容”。
用户在 Mi Note 10 lite 上有一个 MIUI 12 和 Android 11。 小米Note 10也是一样,没问题。
检查了 Android 源代码:
case TYPE_OEPN_TREE:
final Uri treeUri = mTarget.getTreeDocumentUri();
final BaseActivity activity = (BaseActivity) getActivity();
final String target = activity.getCurrentTitle();
final String text = getString(R.string.open_tree_dialog_title,
**getCallingAppName**(getActivity()), target);
message = getString(R.string.open_tree_dialog_message,
**getCallingAppName**(getActivity()), target);
builder.setTitle(text);
builder.setMessage(message);
builder.setPositiveButton(
R.string.allow,
(DialogInterface dialog, int id) -> {
pickResult.increaseActionCount();
mActions.finishPicking(treeUri);
});
break;
@NonNull
public static String getCallingAppName(Activity activity) {
final String anonymous = activity.getString(R.string.anonymous_application);
final String packageName = getCallingPackageName(activity);
if (TextUtils.isEmpty(packageName)) {
return anonymous;
}
final PackageManager pm = activity.getPackageManager();
ApplicationInfo ai;
try {
ai = pm.getApplicationInfo(packageName, 0);
} catch (final PackageManager.NameNotFoundException e) {
return anonymous;
}
CharSequence result = pm.getApplicationLabel(ai);
return TextUtils.isEmpty(result) ? anonymous : result.toString();
}
public static String getCallingPackageName(Activity activity) {
String callingPackage = activity.getCallingPackage();
// System apps can set the calling package name using an extra.
try {
ApplicationInfo info =
activity.getPackageManager().getApplicationInfo(callingPackage, 0);
if (isSystemApp(info) || isUpdatedSystemApp(info)) {
final String extra = activity.getIntent().getStringExtra(
Intent.EXTRA_PACKAGE_NAME);
if (extra != null && !TextUtils.isEmpty(extra)) {
callingPackage = extra;
}
}
} catch (NameNotFoundException e) {
// Couldn't lookup calling package info. This isn't really
// gonna happen, given that we're getting the name of the
// calling package from trusty old Activity.getCallingPackage.
// For that reason, we ignore this exception.
}
return callingPackage;
}
...而且似乎由于某种原因找不到我的包名。怎么可能发生? 让他安装我的其他应用程序之一,它也发生在那里。 然后让他从 Playstore (FX File Explorer) 安装另一个应用程序,但没有安装。 所以它特定于他的设备和我的应用程序。
原来是该用户在开发者设置中关闭了MIUI优化。
错误报告:συσκευη,εκδοση miui,Play 商店安装(alpha 1021)。关闭 MIUI 优化后无法指定 b ios 文件或指定游戏镜像目录。将它们重新打开可以解决问题,并且可以正常扫描目录。同样在允许文件夹访问的弹出窗口中,应用程序在我的系统上显示为“匿名”而不是 AetherSX2。一些开发人员在这里谈论同样的问题。