我需要与Android Marshmallow一起使用的android-support-v4,因为它包含对象PermissionChecker
,如果用户拒绝了应用权限(如位置),这是唯一知道(在Marshmallow及以上)的方式例如)。
我看到C:\ Program Files(x86)\ Embarcadero \ Studio \ 18.0 \ lib \ android \ debug \ android-support-v4.jar但我在C:\ Program中看不到任何PermissionChecker
文件(x86)\ Embarcadero \ Studio \ 18.0 \ lib \ android \ debug \ classes.dex所以我猜这是一个旧的support-v4,它在classes.dex中使用。
有没有办法更新classes.dex以使用最新的android-support-v4?
答案 0 :(得分:1)
这就是我的所作所为:
对C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 18.0 \ PlatformSDKs \ android-sdk-windows \ extras \ android \ support \ v4中的android-support-v4.jar文件使用Java2OP(你可能需要)在Android SDK Manager的Extras部分下载Android Support Library,因为该jar中存在PermissionChecker。
在项目的“库”节点中禁用了android-support-v4.dex.jar。
在项目中添加了android-support-v4.jar(在步骤1中提到)
如果用户拒绝了许可(即在Android 6或更高版本中),使用TJPermissionChecker.JavaClass.checkSelfPermission现在会返回正确的结果
答案 1 :(得分:0)
关于机会,我对已发布的问题的评论/问题的答案是"哦,我没有尝试过这样的问题"并且常规方法工作正常,这是一个进行常规Android权限检查的单元。
unit MiscU;
interface
function HasPermission(const Permission: string): Boolean;
implementation
uses
FMX.Helpers.Android,
Androidapi.Helpers,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.GraphicsContentViewText;
function HasPermission(const Permission: string): Boolean;
begin
//Permissions listed at http://d.android.com/reference/android/Manifest.permission.html
{$IF RTLVersion >= 30}
Result := TAndroidHelper.Context.checkCallingOrSelfPermission(
{$ELSE}
Result := SharedActivityContext.checkCallingOrSelfPermission(
{$ENDIF}
StringToJString(Permission)) =
TJPackageManager.JavaClass.PERMISSION_GRANTED
end;
end.
如果发现我只是不知道更现代的Android版本的某些方面,我会删除这个答案,而且这个列表与提问者试图解决的问题完全无关。