2013-07-10 14 views
7

क्या एंड्रॉइड गतिविधि का पता लगाने का कोई तरीका है कि यह कैसे लॉन्च किया गया था? विशेष रूप से, मैं यह जानना चाहता हूं कि मेरा ऐप ग्रहण से शुरू हुआ था, बनाम अगर यह सामान्य रूप से शुरू किया गया था (उदाहरण के लिए, होम स्क्रीन या इंस्टॉल की गई एप्लिकेशन सूची से)।क्या मेरा एंड्रॉइड ऐप पता लगा सकता है कि यह ग्रहण से लॉन्च किया गया था?

यह जानने के लिए प्रॉक्सी है कि क्या क्रैश रिपोर्ट अपलोड की जानी चाहिए या नहीं। मुझे लगता है कि ग्रहण ने ऐप लॉन्च किया है, तो मुझे क्रैश अपलोड करने की आवश्यकता नहीं है, क्योंकि मैं पहले से ही ऐप डिबग कर रहा हूं, लेकिन यदि ऐप का एक ही निर्माण "सामान्य रूप से" शुरू होता है, तो मैं किसी भी को अपलोड करना चाहता हूं अपवाद नहीं।

यह सिर्फ मेरी व्यक्तिगत डिबगिंग और विकास को आसान बनाने के लिए है, इसलिए ग्रहण करने के लिए अप्रचलित हैक्स या ट्वीक्स मेरे लिए उपयोगी हैं।

उत्तर

2

This विधि तुम क्या आवश्यकता होती है करने के लिए प्रकट होता है:

if(!android.os.Debug.isDebuggerConnected()) { 
    // Send report... 
} 

यह आपको बताना चाहिए यदि आप वर्तमान में एक डिबगर से जुड़ी रहे हैं। यदि ऐप ड्रॉवर या होमस्क्रीन शॉर्टकट से लॉन्च किया गया है, तो आपसे जुड़े नहीं होंगे (जब तक कि आपके पास पहले से चलने वाला उदाहरण नहीं है कि संलग्न है) और यह विधि गलत हो जाएगी - इस मामले में आप अपनी क्रैश जानकारी अपलोड कर सकते हैं।

+0

यह जांच करेगा कि ऐप वास्तव में डीबग किया जा रहा है या नहीं। –

+0

हां, जो कम से कम दो अलग-अलग तरीकों में से एक है जिसे ग्रहण से लॉन्च किया जा सकता है। –

+0

मैंने अभी कोशिश की है और ग्रहण डीबगर से चलने पर सत्य हो (और लॉन्चर से चलने पर झूठी)। ग्रहण से "सामान्य रूप से" ऐप चलाने से भी झूठ आती है, हालांकि। प्रत्येक उपयोग के लिए डीबगर के नीचे चलना थोड़ा हेवीवेट है, लेकिन शायद मैं इसका उपयोग कर सकता हूं। –

1

आप रिलीज निर्माण से डीबग बिल्ड को बताने के लिए if (BuildConfig.DEBUG) का उपयोग कर सकते हैं।

+0

यह भी उपयोगी है, लेकिन आपको इसके साथ सावधान रहना होगा - ऐसा प्रतीत होता है कि आप कभी-कभी BuildConfig.DEBUG के साथ रिलीज़ बिल्ड को सच्चाई में सेट कर सकते हैं। [यहां] देखें (https://code.google.com/p/android/issues/detail?id=27940) और [यहां] (http://www.digipom.com/be-careful-with-buildconfig- डिबग /)। –

+0

समझने के रूप में, यह एक निर्माण की संपत्ति है (यह ऐप में स्थिर है)। मैं कुछ ऐसा परीक्षण करना चाहता हूं जो इस पर निर्भर करता है कि (डीबग-बिल्ड) ऐप कैसे शुरू किया गया है। –

1

आप (मैं?) ऐप में एक नई गतिविधि जोड़ सकते हैं, और ग्रहण लॉन्च कर सकते हैं। नई गतिविधि एक झंडा सेट करेगी जो अन्यथा सेट नहीं होती है, और अन्यथा वही होती है। ऐप का नियमित उपयोग डिफ़ॉल्ट गतिविधि के माध्यम से आ जाएगा, और इसलिए ध्वज को अनसेट करने के लिए डिफ़ॉल्ट किया जाएगा।

एक नया DebugActivity कि मौजूदा गतिविधि फैली जोड़ें (यह MainActivity कहते हैं):

public class DebugActivity extends MainActivity { 
    public DebugActivity() { 
     super(true); // running from Eclipse 
    } 
} 

MainActivity के लिए एक नया बूलियन निर्माता और कोई आर्ग निर्माता जोड़े नया उपवर्ग समर्थन करने के लिए:

private final boolean viaEclipse; 

public MainActivity() { 
    this(false); 
} 

public MainActivity(boolean viaEclipse) { 
    this.viaEclipse = viaEclipse; 
} 

.MainActivity के लिए ऐप मेनिफेस्ट में <activity> जानकारी डुप्लिकेट करें, लेकिन नए .DebugActivity को संदर्भित करने के लिए डुप्लिकेट बदलें। एंड्रॉइड यूआई में दिखने से रोकने के लिए टैग ("लॉन्चर" एक) .DebugActivity<intent-filter> से निकालें।

ग्रहण में, Run -> Run Configurations ... चुनें। ऐप के लिए मौजूदा रन कॉन्फ़िगरेशन का चयन करें। "वर्तमान में चुने गए लॉन्च कॉन्फ़िगरेशन को डुप्लिकेट करें" आइकन पर क्लिक करें, और डुप्लिकेट में Android टैब पर Launch Action को "लॉन्च डिफ़ॉल्ट गतिविधि" से "लॉन्च करें" में बदलें और नया .DebugActivity चुनें।

Downsides

  1. ग्रहण "डिबग" रन एक "वास्तविक" चलाने के लिए समान नहीं हैं, लेकिन अंतर बहुत छोटा है (मूल रूप से बस लांच वर्ग के नाम और ढेर पर एक अतिरिक्त प्रविष्टि) । कम से कम जावा पक्ष पर कोई डुप्लिकेट कोड नहीं है।

  2. मैं प्रकट में मेरी <activity> की सामग्री है, जो एक छोटे से कमजोर लेकिन बहुत बुरा नहीं है का सबसे दोहराया।

अभी भी इससे कुछ आसान होना अच्छा लगेगा।

+0

यदि आप अपने मैनिग में अपनी डीबगएक्टिविटी एंट्री से '' लाइन हटाते हैं, तो यह आपके लॉन्चर में आइकन के रूप में दिखाई नहीं देगा :) –

+0

अच्छा। एक कम नकारात्मक ... मैं जवाब अपडेट कर दूंगा। –

संबंधित मुद्दे

 संबंधित मुद्दे