मुझे लगता है कि आप जो हासिल करना चाहते हैं वह पहले ही एसीआरए द्वारा किया जा चुका है। यहाँ मैं अपने अब्द logcat में देखते है:
01-23 12:15:28.056: D/ACRA(614): Writing crash report file.
01-23 12:15:28.136: D/ACRA(614): Mark all pending reports as approved.
01-23 12:15:28.136: D/ACRA(614): Looking for error files in /data/data/com.ybi/files
01-23 12:15:28.136: V/ACRA(614): About to start ReportSenderWorker from #handleException
01-23 12:15:28.146: D/ACRA(614): Add user comment to null
01-23 12:15:28.146: D/ACRA(614): #checkAndSendReports - start
01-23 12:15:28.146: D/ACRA(614): Looking for error files in /data/data/com.ybi/files
पहली बात यह है कि ACRA अपने अनुप्रयोग के भीतर भंडारण पर एक फ़ाइल पर एक रिपोर्ट पैदा कर रही है। फिर यदि आप ऑनलाइन हैं और त्रुटिरोधक सही ढंग से प्रारंभ किया गया है, तो यह रिपोर्ट भेजता है। अन्यथा, डेटा संग्रहण में रिपोर्ट रखी जाती है (बाद में भेजने के लिए)।
मैंने डेटा को नहीं देखा लेकिन मैं वर्तमान में एक कस्टम लॉगर पर काम कर रहा हूं। तो अगर आप ACRA से एक ही काम करने के लिए चाहते हैं, यह आसान है:
ACRA.init(this);
// a custom reporter for your very own purposes
ErrorReporter.getInstance().setReportSender(new LocalReportSender(this));
और फिर:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.acra.ACRA;
import org.acra.CrashReportData;
import org.acra.ReportField;
import org.acra.sender.ReportSender;
import org.acra.sender.ReportSenderException;
import android.content.Context;
import de.akquinet.android.androlog.Log;
public class LocalReportSender implements ReportSender {
private final Map<ReportField, String> mMapping = new HashMap<ReportField, String>() ;
private FileOutputStream crashReport = null;
public LocalReportSender(Context ctx) {
// the destination
try {
crashReport = ctx.openFileOutput("crashReport", Context.MODE_WORLD_READABLE);
} catch (FileNotFoundException e) {
Log.e("TAG", "IO ERROR",e);
}
}
@Override
public void send(CrashReportData report) throws ReportSenderException {
final Map<String, String> finalReport = remap(report);
try {
OutputStreamWriter osw = new OutputStreamWriter(crashReport);
Set set = finalReport.entrySet();
Iterator i = set.iterator();
while (i.hasNext()) {
Map.Entry<String,String> me = (Map.Entry) i.next();
osw.write("[" + me.getKey() + "]=" + me.getValue());
}
osw.flush();
osw.close();
} catch (IOException e) {
Log.e("TAG", "IO ERROR",e);
}
}
private static boolean isNull(String aString) {
return aString == null || ACRA.NULL_VALUE.equals(aString);
}
private Map<String, String> remap(Map<ReportField, String> report) {
ReportField[] fields = ACRA.getConfig().customReportContent();
if (fields.length == 0) {
fields = ACRA.DEFAULT_REPORT_FIELDS;
}
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;
}
}
मैं पूरी तरह से इसे अभी तक परीक्षण नहीं किया था, लेकिन आप विचार मिलता है। आशा करता हूँ की ये काम करेगा।
आपको बहुत अधिक उपयोगकर्ता 1102206 धन्यवाद, क्या आपके पास विचार है, हम उन ट्रैक को कैसे भेज सकते हैं जो पुन: प्रारंभ करने के बाद गतिविधि में बटन पर क्लिक करके फ़ाइल में लिखे गए हैं [एप्लिकेशन को फिर से खोलें]? स्वचालित रूप से रिपोर्ट भेजने की बजाय। ** Req: पूरी तरह से परीक्षण के बाद। कृपया उत्तर अपडेट करें। ** b'coz इस बारे में कोई अच्छी पोस्ट नहीं मिली .. इसलिए यह दूसरों के लिए भी अधिक उपयोगी होगी .. – Jayabal
धन्यवाद बाया। एसीआरए पर आपके शुरुआती प्रश्न के बारे में, पहला बिंदु आपके प्रश्न का उत्तर देता है: यदि आपका ऐप दुर्घटनाग्रस्त हो जाता है, तो एसीआरए इंटरनेट कनेक्शन उपलब्धता से निपटने के लिए, हाथ से इसे करने की आवश्यकता नहीं है। एक रिपोर्ट भेजने के बारे में, कुछ चीजें Acra वेबसाइट में उपलब्ध हैं (यहां: http://code.google.com/p/acra/source/browse/trunk/acra/src/main/java/org/acra/sender /)। उपरोक्त कोड एक वर्ग द्वारा प्रेरित तरीके से है। मेरा पूरा मतलब है जब मैंने पूरी तरह से परीक्षण किया था, मामूली मामला है: रिपोर्ट के लिए डिवाइस पर कोई स्थान नहीं छोड़ा गया है, एसडीकार्ड पर लिखने के लिए कोई विशेषाधिकार नहीं है, एक्र्रा कॉन्फ़िगरेशन ठीक से सेट नहीं है, आदि – Gomoku7
बहिष्कृत समाधान, कृपया, उपयोगकर्ता 2302510 उत्तर – dayanruben