Delphi Android requestPermissions - 未找到调用方法
Delphi Android requestPermissions - invoke method not found
我尝试请求 LOCATION_HARDWARE 读取 USB 的权限。
在 delphi 我试试这个代码:
procedure getPermiss;
var
LPermissions: TJavaObjectArray<JString>;
begin
LPermissions := TJavaObjectArray<JString>.Create(1);
LPermissions.Items[0] := StringToJString('android.permission.LOCATION_HARDWARE');
try
TAndroidHelper.Activity.requestPermissions( LPermissions, 1);
except
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName+' ' +E.Message);
end;
end;
end;
但在 Android Phone 中的测试显示此错误:
"JNIFatal: Invoke Method Not Found"
我看到Activity的requestPermissions方法需要3个参数,而delphi只需要2个。
AndroidStudio 上的方法签名是
requestPermssions(上下文, 字符串[], int)
和 delphi 是
requestPermissions(字符串[], int)
隐藏第一个(上下文)
这个差异是问题所在吗?我该如何解决?
感谢
这是因为 requestPermissions( );
是在版本 24.1.0
的支持库 (https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html) 中引入的
Delphi 默认使用旧版本的支持库,因此没有 requestPermissions( );
实现。但是,您可以用新的替换 delphi 使用的默认支持库,您可以在 https://github.com/Zeus64/alcinoe
查看示例
我尝试请求 LOCATION_HARDWARE 读取 USB 的权限。
在 delphi 我试试这个代码:
procedure getPermiss;
var
LPermissions: TJavaObjectArray<JString>;
begin
LPermissions := TJavaObjectArray<JString>.Create(1);
LPermissions.Items[0] := StringToJString('android.permission.LOCATION_HARDWARE');
try
TAndroidHelper.Activity.requestPermissions( LPermissions, 1);
except
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName+' ' +E.Message);
end;
end;
end;
但在 Android Phone 中的测试显示此错误: "JNIFatal: Invoke Method Not Found"
我看到Activity的requestPermissions方法需要3个参数,而delphi只需要2个。
AndroidStudio 上的方法签名是 requestPermssions(上下文, 字符串[], int)
和 delphi 是 requestPermissions(字符串[], int)
隐藏第一个(上下文)
这个差异是问题所在吗?我该如何解决?
感谢
这是因为 requestPermissions( );
是在版本 24.1.0
的支持库 (https://developer.android.com/reference/android/support/v4/app/ActivityCompat.html) 中引入的
Delphi 默认使用旧版本的支持库,因此没有 requestPermissions( );
实现。但是,您可以用新的替换 delphi 使用的默认支持库,您可以在 https://github.com/Zeus64/alcinoe