我正在使用ACRA作为错误记者,我将 acra-4.6.1.jar 添加到我的项目并制作了这个类
ReportApp.java
package org.qtproject.example.ourmessenger;
import org.acra.*;
import org.acra.annotation.*;
import org.qtproject.qt5.android.bindings.QtApplication;
import android.app.Application;
@ReportsCrashes(
formUri = "http://######/#####/######/####.php",
formUriBasicAuthLogin = "root",
formUriBasicAuthPassword = "#######",
mode = ReportingInteractionMode.TOAST,
forceCloseDialogAfterToast = false,
resToastText = R.string.crash_toast_text
)
public class ReportApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ACRA.init(this);
}
}
然后,我在AndroidManifest上编辑了我的android:name:
AndoridManifest.xml
<application android:hardwareAccelerated="true" android:name="org.qtproject.example.ourmessenger.ReportApp" android:label="@string/app_name" android:icon="@drawable/icon">
我还在</manifest>
之前的AndroidManifest.xml末尾添加了这一行:
<CheckBoxPreference android:key="acra.enable" android:title="@string/pref_enable_acra" android:summaryOn="@string/pref_acra_enabled" android:summaryOff="@string/pref_acra_disabled" android:defaultValue="true"/>
我用这个
String i=null;
i.contains("kj");
用于测试ACRA。实际上它不起作用。我没有向mainActivity添加任何内容。
MainActivity.java
.
.
public class MainActivity extends QtActivity implements SensorEventListener
{
.
.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Context context = getApplicationContext();
SharedPreferences appPref = getSharedPreferences("isFirstRun", 0);
boolean isFirstRun = appPref.getBoolean("isFirstRun", true);
.
.
}
.
.
}
它不仅没有显示任何TOAST消息,而且也没有向服务器报告。任何建议?
答案 0 :(得分:1)
您需要在@ReportsCrashes中为您的目标服务提及请求类型。对于基本上是POST或PUT服务的formUri = "http://######/#####/######/####.php"
服务,请在@ReportsCrashes块中添加httpMethod = org.acra.sender.HttpSender.Method.POST
或httpMethod = org.acra.sender.HttpSender.Method.PUT
。
有关详细信息,请参阅doc。
答案 1 :(得分:1)
我也尝试将ACRA与qt-android项目一起使用,它也不会报告任何内容,无论是调用abort()还是在别处强制出错。
我看到它正确初始化,但是当我强制崩溃时,我只是得到常规的Android崩溃消息,没有吐司或电子邮件。
private bool IsRequestTransferred()
{
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
int requestCompletionCount = 0;
foreach (var stackFrame in stackTrace.GetFrames())
{
System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
if (methodBase.DeclaringType.Name == "UnsafeIISMethods" && methodBase.Name == "MgdIndicateCompletion")
{
if (++requestCompletionCount == 2)
{
return true;
}
}
}
return false;
}
void Application_Error(object sender, EventArgs e)
{
bool isRequestTransferred = IsRequestTransferred();
}
也许Acra无法在android-qt应用程序(c ++)中工作?