FireMonkey有没有办法使用与Marshmallow一起使用的android-support-v4?

时间:2016-09-29 12:07:44

标签: android delphi firemonkey

我需要与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?

2 个答案:

答案 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版本的某些方面,我会删除这个答案,而且这个列表与提问者试图解决的问题完全无关。