2013-08-15 8 views
12

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

यह क्रैशिंग या मुझे कोई संकेत नहीं दे रहा है कि लॉगकैट में क्या हो रहा है, यह कुछ भी नहीं कर रहा है।

भेजने समारोह

private void sendFinishLog(String ID, String Cond) 
{ 
    Log.d("me", "send finish log"); 
    Intent logIntent = new Intent(); 
    logIntent.putExtra("ID", ID); 
    logIntent.putExtra("Cond", Cond); 
    logIntent.setAction("com.me.intent.finishlog"); 
    Log.d("me","logIntent : " + logIntent.toString() 
     +logIntent.getExtras().toString()); 
    sendBroadcast(logIntent); 
} 

वर्ग

public class LogReceiver extends BroadcastReceiver { 

    public static ArrayList<LogDataHolder> logData = new ArrayList<LogDataHolder>(); 
    private boolean found; 
    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    private static String lasttime; 
    private static String now = "Boot time"; 
    @Override 
    public void onReceive(Context cont, Intent logIntent) 
    { 
     Log.d("me","On receive"); 
       etc..... 
    } 

प्राप्त ऐप्लिकेशन मेनिफेस्ट

<!-- for receiving logs --> 
<receiver 
    android:name = "LogReceiver" 
    android:enabled="true"> 
    <intent_filter> 
     <action android:name="com.me.intent.finishlog" /> 
    </intent_filter> 
</receiver> 
+1

क्या आपने रिसीवर पंजीकृत किया था? – bofredo

+0

मेनिफेस्ट में – Cob50nm

+0

नहीं, प्रोग्रामेटिक रूप से – bofredo

उत्तर

7

कुछ की तरह जोड़े जाने की आवश्यकता हो सकती है:

public void onResume() { 
    IntentFilter filter = new IntentFilter(); 
    getActivity().registerReceiver(mLogReceiver,filter); 
} 

और के लिए संयुक्त राष्ट्र से रजिस्टर:

public void onPause() { 
    getActivity().unregsiterReceiver(mLogreceiver); 
} 

संपादित करें: मैं सिर्फ सोचा है कि आपके LogReceiver श्रेणी न तो कोई कन्स्ट्रक्टर है। आप एक अच्छी तरह से लिखने के लिए की आवश्यकता होगी:

private LogReceiver mLogReceiver = new LogReceiver() { 

और जैसे आप यह पहले से ही अपने कोड में है कि तुम्हारे जाने के बाद onReceive-विधि का उपयोग कर सकते हैं।

+1

ओवरड्रिएन ऑन रीसीव-विधि होना चाहिए मेरी आखिरी पंक्ति के {} के अंदर। – bofredo

+2

यदि आप इसे मेनिफेस्ट में करते हैं तो आपको ऐसा करने की आवश्यकता नहीं है हालांकि – Cob50nm

+0

यह भी निर्माता के लिए मान्य है? – bofredo

3

इस तरह फिर से कोशिश करो प्राप्त करते हैं। श्रेणी

<!-- for receiving logs --> 
<receiver 
    android:name = "LogReceiver" 
    android:enabled="true"> 
    <intent_filter> 
     <action android:name="com.me.intent.finishlog" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     </intent_filter> 
</receiver> 
+0

हालांकि डिफ़ॉल्ट मतलब क्या है? क्या इसका मतलब एक मानक एंड्रॉइड है या इसका उपयोग कस्टम इरादे के कार्यों के लिए किया जा सकता है? – Cob50nm

+0

यदि आपको कोई कार्रवाई जोड़ने की आवश्यकता नहीं है, तो आपको श्रेणी जोड़ने की आवश्यकता नहीं है। लेकिन यदि आप कार्रवाई जोड़ते हैं, तो मुझे लगता है कि इस क्रिया का उपयोग करने के तरीके को इंगित करने के लिए एक श्रेणी जोड़ने के लिए आवश्यक है – Eden

0

आप में रिसीवर घोषित प्रकट रूप में:

android:name = "LogReceiver" 

documentation कहा गया है कि नाम होना चाहिए:

वर्ग कि प्रसारण रिसीवर को लागू करता है के नाम, BroadcastReceiver के उपवर्ग । यह पूरी तरह से योग्य श्रेणी नाम होना चाहिए (जैसे "com.example.project.ReportReceiver")। हालांकि, शॉर्टैंड के रूप में, यदि नाम का पहला अक्षर एक अवधि है ( उदाहरण के लिए, "ReportReceiver"), यह तत्व में निर्दिष्ट पैकेज नाम में जोड़ा गया है।

दूसरे शब्दों में, इसे पैकेज को शामिल करने की आवश्यकता है। करने के लिए नाम बदलने का प्रयास करें: जब मैं OnPause से अपंजीकृत रिसीवर हटाया

android:name = ".LogReceiver" 

या

android:name = "com.me.yourpackagename.LogReceiver" 
+1

मैंने कोशिश की है और यह काम नहीं किया – Cob50nm

+0

एक पूर्ण परियोजना पोस्ट करें। –

+0

पूर्ण प्रोजेक्ट> कोड की 50,000 लाइनें है, जो वास्तव में एक विकल्प नहीं है – Cob50nm

1

मेरी समस्या हल किया गया था()। तरीका।

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