Suvitruf - Andrei Apanasik Asked:2020-05-13 01:32:32 +0800 CST2020-05-13 01:32:32 +0800 CST 2020-05-13 01:32:32 +0800 CST 如何在 Android 4.4+ 上轻松方便地从用户那里获取游戏日志? 772 在 Android 4.4+ 上,您无法读取其他人的日志。像 Logcat 这样的应用程序不起作用。如何以方便他们和我们的方式从用户那里获取游戏日志? 不提供亚行。 不提供与 PC 的连接。 不提供根。 欢迎任何易于编程的解决方案。或者,如果可能的话,其他的东西。 android 1 个回答 Voted Best Answer Suvitruf - Andrei Apanasik 2020-05-13T01:38:54+08:002020-05-13T01:38:54+08:00 在 Unity 中创建一个类: public class LogsHelper { private static AndroidJavaObject m_Activity; private static AndroidJavaObject m_Logger; private static AndroidJavaObject GetActivity() { if (m_Activity == null) { var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); m_Activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); } return m_Activity; } private static AndroidJavaObject GetLogsHelper() { return m_Logger ?? (m_Logger = new AndroidJavaObject("com.test.LogsSender")); } public static void SendLogs() { GetLogsHelper().Call("sendLogs", GetActivity()); } } 在 Java 插件类中: package com.test; import android.app.Activity; import android.content.Intent; import android.util.Log; import java.io.BufferedReader; import java.io.InputStreamReader; public class LogsSender { public void sendLogs(Activity activity) { Log.d("unity", "sendLogs" ); int pid = android.os.Process.myPid(); try { String command = String.format("logcat -d -v threadtime *:*"); Process process = Runtime.getRuntime().exec(command); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuilder result = new StringBuilder(); String currentLine = null; while ((currentLine = reader.readLine()) != null) { if (currentLine != null && currentLine.contains(String.valueOf(pid))) { result.append(currentLine); result.append("\n"); } } Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); emailIntent.setType("vnd.android.cursor.item/email"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"support@kek.com"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Logs"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, result.toString()); activity.startActivity(Intent.createChooser(emailIntent, "Send mail using...")); } catch (Exception e) { e.printStackTrace(); } } } 可能需要<uses-permission android:name="android.permission.READ_LOGS" />。 在 Unity 中,我们称LogsHelper.SendLogs(). 之后,用户将看到一个窗口,可以选择邮件应用程序。选择后,应用程序将打开,所有字段都已输入,用户只需单击“提交”按钮。之后,日志将成功发送到您的电子邮件。
在 Unity 中创建一个类:
在 Java 插件类中:
可能需要
<uses-permission android:name="android.permission.READ_LOGS" />
。在 Unity 中,我们称
LogsHelper.SendLogs()
. 之后,用户将看到一个窗口,可以选择邮件应用程序。选择后,应用程序将打开,所有字段都已输入,用户只需单击“提交”按钮。之后,日志将成功发送到您的电子邮件。