android - log.d 不适用于 Android 服务(Delphi Berlin)

标签 android delphi service

我正在使用 Delphi-Berlin Update-2

Android 服务不能使用 log.d(),因为它需要使用 FMX.Types,使用它会导致整个应用程序崩溃。

我试图从 FMX.Types 中提取日志部分,但没有成功。

是否有任何解决方案让 log.d 工作?

到目前为止,我一直在为此使用 IdUDP,但这不是一个理想的解决方案。

最佳答案

我正在使用 Tokyo 并在真实的 LG-LS997 设备上看到同样的问题。

你可以这样使用内置的LOGI:

uses Androidapi.Log;

procedure MyProcedure(msg: String);
var
  M: TMarshaller;
begin
  LOGI(M.AsUtf8(msg).ToPointer);
end;

更多信息:

每次我在我的服务中包含一个 FMX 单元时,我都会遇到一个段错误。 Log.d 调用 LOGI,后者调用 Android NDK 函数 __android_log_write。还有用于格式化的__android_log_print,不过还没有换行。无论如何,您可能应该只在 Delphi 中格式化并调用 __android_log_write

LOGI 被定义为以日志级别 ANDROID_LOG_INFO 调用 __android_log_write。 Warn、error 和 fatal 也被封装为 LOGWLOGELOGF

我在这里包含了其余的日志记录级别(未经测试,不包括 ANDROID_LOG_UNKNOWN):

function LOGDEF(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_DEFAULT, 'default', Text);
end;

function LOGV(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_VERBOSE, 'verbose', Text);
end;

function LOGDBG(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_DEBUG, 'debug', Text);
end;

function LOGS(Text: MarshaledAString): Integer;
begin
  Result := __android_log_write(android_LogPriority.ANDROID_LOG_SILENT, 'silent', Text);
end;

关于android - log.d 不适用于 Android 服务(Delphi Berlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102803/

相关文章:

android - EventBus vs Callbacks,什么时候使用?

java - ksoap2 org.xmlpull.v1.xmlpullparserexception 预期 start_tag 错误

c# - 在依赖 Oracle 的 Windows 启动时自动启动 Windows 服务

javascript - 为什么我们应该使用 RxJs of() 函数?

android - 更改系统时钟时警报管理器停止

java - 如何修复 "More than one file was found with OS independent path ' project.properties'"Android Studio 3.0 Beta-6 中的错误

android - 如何为 Android 布局文件创建可重用的 xml 包装器

delphi - Delphi 中单个图表上的堆叠和普通条形图系列

delphi - 下面的代码值得单元测试吗?

具有自定义样式的 Delphi 项目