gpt4 book ai didi

android - ACRA 4.9.0 : How can I write ACRA report to file (in Application data folder)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:15 27 4
gpt4 key购买 nike

我想使用最新的 Acra 4.9.0 将崩溃报告写入文本文件。我不能举例说明这个最新版本。我尝试使用可用的文档。

Acra 已启用但它没有写入文件。

myApp

 package com.myApp;

import org.acra.ACRA;

import android.app.AlertDialog;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.KeyEvent;
import android.view.View;

import com.myApp.Application.AppLauncher;
import com.myApp.interfaces.AppEvents;
import com.myApp.R;
import com.utils.Config;
import com.utils.Constants;
import com.utils.DeviceValidator;

public class myApp extends FragmentActivity
{
private AppLauncher appLauncher = null;


@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

if(!ACRA.isACRASenderServiceProcess())
{
setContentView(R.layout.activity_myApp);

appLauncher = new AppLauncher();

appLauncher.registerEventListener(appEventsListener);

appLauncher.initApp(this);

}
}

@Override
public void onPause() {
super.onPause();

if(!DeviceValidator.isDeviceValid())
{
return;
}

appLauncher.activityOnPause();
}

@Override
protected void onRestart() {
super.onRestart();
}

@Override
protected void onStart()
{
super.onStart();
}

@Override
public void onResume()
{
super.onResume();

appLauncher.activityOnResume();
}
}

AcraApplication

    package com.myAPP;

import org.acra.ACRA;
import org.acra.ReportField;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;
import org.acra.sender.HttpSender.Method;

import android.app.Application;

@ReportsCrashes(
formUri = "http://staging.jemtv.com/variable_dump/index.php",
customReportContent = { ReportField.REPORT_ID, ReportField.DEVICE_ID, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.STACK_TRACE, ReportField.CUSTOM_DATA, ReportField.LOGCAT },
httpMethod = Method.POST,
reportSenderFactoryClasses = org.acra.util.MyOwnSenderFactory.class,
mode = ReportingInteractionMode.SILENT
)

public class AcraApplication extends Application
{
public AcraApplication()
{
super();
}

@Override
public void onCreate() {
super.onCreate();
ACRA.init(this);
}

}

MyOwnSender

package org.acra.util;

import java.io.File;
import java.io.FileOutputStream;

import org.acra.ReportField;
import org.acra.collector.CrashReportData;
import org.acra.config.ACRAConfiguration;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;

import android.content.Context;
import android.support.annotation.NonNull;
import android.util.Log;

public class MyOwnSender implements ReportSender {
private static final String FILE_NAME = "AcraReport.txt";
//private final Map<ReportField, String> mMapping = new HashMap<ReportField, String>();
//private FileWriter crashReport = null;

MyOwnSender(Context context, @NonNull ACRAConfiguration config)
{
Log.d("testAcra", "MyOwnSender created");
/* File logFile = new File(context.getFilesDir().getPath() + "/" + FILE_NAME, FILE_NAME);

try {
crashReport = new FileWriter(logFile, true);
} catch (IOException e) {
e.printStackTrace();
}*/
}

@Override
public void send(Context context, CrashReportData report) throws ReportSenderException
{
// Iterate over the CrashReportData instance and do whatever
// you need with each pair of ReportField key / String value

String finalReport = createCrashReport(report);
String tempFile = context.getFilesDir().getPath() + "/" + FILE_NAME;

try
{
File detailedFile = new File(tempFile);

if(!detailedFile.exists())
detailedFile.createNewFile();

FileOutputStream stream = new FileOutputStream(detailedFile, true);

stream.write(finalReport.getBytes());
Log.d("testAcra","adding to file: "+stream);
stream.close();

}
catch (Exception e)
{

e.printStackTrace();
}
/*final Map<String, String> finalReport = remap(report);

try {
BufferedWriter buf = new BufferedWriter(crashReport);

Set<Entry<String, String>> set = reportBody.entrySet();
Iterator<Entry<String, String>> i = set.iterator();

while (i.hasNext()) {
Map.Entry<String, String> me = (Entry<String, String>) i.next();
buf.append("[" + me.getKey() + "]=" + me.getValue());
}

buf.flush();
buf.close();
} catch (IOException e) {
Log.e("TAG", "IO ERROR", e);
}*/
}

private String createCrashReport(CrashReportData crashReportData){
StringBuilder body = new StringBuilder();

body.append("ReportID : " + crashReportData.getProperty(ReportField.REPORT_ID))
.append("\n")
.append("DeviceID : " + crashReportData.getProperty(ReportField.DEVICE_ID))
.append("\n")
.append("AppVersionName : " + crashReportData.getProperty(ReportField.APP_VERSION_NAME))
.append("\n")
.append("Android Version : " + crashReportData.getProperty(ReportField.ANDROID_VERSION))
.append("\n")
.append("CustomData : " + crashReportData.getProperty(ReportField.CUSTOM_DATA))
.append("\n")
.append("STACK TRACE : \n" + crashReportData.getProperty(ReportField.STACK_TRACE))
.append("\n")
.append("LogCAT : \n" + crashReportData.getProperty(ReportField.LOGCAT));

return body.toString();
}

/* private Map<String, String> remap(Map<ReportField, String> report) {

Set<ReportField>fields = ACRA.getConfig().getReportFields();


final Map<String, String> finalReport = new HashMap<String, String>(report.size());
for (ReportField field : fields)
{
if (mMapping == null || mMapping.get(field) == null)
finalReport.put(field.toString(), report.get(field));
else
finalReport.put(mMapping.get(field), report.get(field));
}
return finalReport;
}*/
}

MyOwnSenderFactory

package org.acra.util;

import org.acra.config.ACRAConfiguration;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderFactory;

import android.content.Context;
import android.support.annotation.NonNull;

public class MyOwnSenderFactory implements ReportSenderFactory {

// NB requires a no arg constructor.
/*MyOwnSenderFactory()
{
Log.e("testAcra", "MyOwnSenderFactory created");
}*/

@Override
@NonNull
public ReportSender create(@NonNull Context context, @NonNull ACRAConfiguration config) {
// TODO Auto-generated method stub
return new MyOwnSender(context, config);
}
}

最佳答案

因为我使用的是 jar 文件而不是 aar在我的 list 中我不见了

 <service
android:name="org.acra.sender.SenderService"
android:exported="false"
android:process=":acra" />
enter code here

这就是为什么在 Acra 中使用的 SendeService 没有启动的原因。

关于android - ACRA 4.9.0 : How can I write ACRA report to file (in Application data folder),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39348372/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com