2011-11-06 8 views
8

मुझे वास्तव में निराशाजनक समस्या का सामना करना पड़ता है।"android.provider.Telephony.SMS_RECEIVED" मेरे डिवाइस पर काम नहीं कर रहा है (एचटीसी वाइल्डफायर) - डीबग कैसे करें?

मैंने एसएमएस रिसीवर को अधिकांश ऑनलाइन और पुस्तक के ट्यूटोरियल के रूप में बनाया है।

AndroidManifest.xml:

<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

<application android:name="roboguice.application.RoboApplication" 
      android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:debuggable="true" >  

    <!-- ... other stuffs here ... --> 

    <receiver android:name=".receivers.SmsReceiver"> 
     <intent-filter> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
</application> 

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver { 

    public static final String TAG = "SmsReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS received!"); 
     Toast.makeText(context, "SMS received.", Toast.LENGTH_LONG).show(); 
    } 
} 

हालांकि यह एम्यूलेटर (Android 2.2) पर ठीक से काम करता है यह मेरे एचटीसी जंगल की आग (Android 2.2 पर काम नहीं करता .1, जड़ नहीं है)।

मुख्य समस्या यह है कि मैं एंड्रॉइड डिवॉप्मेंट में नया हूं और मुझे पूरी तरह से पता नहीं है कि इसे कैसे डिबग करना है।

क्या मुझे एसएमएस संदेश प्राप्त होने पर मेरे एचटीसी डिवाइस से लॉगकैट लॉग भेजने के साथ कुछ उपयोगी मिल सकता है? मेरा डिवाइस अलग क्यों है !?

+0

एसएमएस प्रसारण का आदेश दिया गया है, इसलिए चरण 1 आपकी रिसीवर प्राथमिकता को कुछ भयंकर बनाने के लिए है। आप एंड्रॉइड को सेट करके ऐसा करते हैं: आपके इरादे-फ़िल्टर पर प्राथमिकता विशेषता एक लापरवाही उच्च मूल्य और फिर से परीक्षण करने के लिए। 2147483647 की तरह कुछ कोशिश करें। – Jens

+0

यह कुछ भी नहीं बदलेगा :(लॉगबैट में कोई लॉग नहीं, कोई टोस्ट नहीं दिखाया गया है, डिवाइस पर कुछ भी नहीं (एमुलेटर पर यह अपेक्षित काम करता है)। मुझे आश्चर्य है कि मुझे लॉगकैट में ऐसा लॉग क्यों मिलता है जब फोन एसएमएस संदेश प्राप्त करता है: "11-06 23: 43: 20.540: DEBUG/SMSDispatcher (171): प्रेषण WapPushToCIQ >>>"। क्या यह कारण या कोई निशान हो सकता है? – ncreated

+0

एचएम, मौजूदा एसएमएस-फ़िल्टर (मार्केट से) या अपने वाइल्डफायर के समान कुछ डाउनलोड करने का प्रयास करें और पहले परीक्षण करें - यह एचटीसी फोन में कुछ गड़बड़ हो सकता है (पहले हुआ है ..) – Jens

उत्तर

9

कारण & समाधान:

मुझे लगता है कि ठीक है। "android.provider.Telephony.SMS_RECEIVED" काम नहीं कर रहा था क्योंकि मेरे डिवाइस पर "जाओ एसएमएस प्रो" एप्लिकेशन इंस्टॉल किया गया था और अधिसूचना बार में "अन्य संदेश अधिसूचना अक्षम करें" विकल्प चेक किया गया था ("अन्य एसएमएस संबंधित ऐप्स अक्षम करें अधिसूचना बार में अधिसूचना, डुप्लिकेट अधिसूचनाओं से बचें। ")। इसे अनचेक करने से मेरी समस्या ठीक हो गई।

यह सुनिश्चित करने के लिए कि मेरा प्रसारण रिसीवर इस उद्देश्य को प्राप्त करेगा, भले ही कोई अन्य ऐप इसे अवरुद्ध करे? "एंड्रॉइड: प्राथमिकता" के कारण (Intercept SMS messages in Android and prevent them appearing in Messaging App) मुझे कैसे पता चलेगा कि "जाओ एसएमएस प्रो" ऐप के लिए "प्राथमिकता" क्या सेट है?

+0

thx, यह काम करता है, "अग्रिम सेटिंग्स" -> "अन्य सेटिंग्स" -> (अनचेक) "अन्य संदेश अधिसूचना अक्षम करें"। –

0

मुझे पूरा यकीन है कि यह कोड सही है। आप Toast संदेश नहीं देख रहे हैं, लेकिन लॉग आ गए होंगे। लॉगकैट की जांच करें और आपको जो लॉग रखा है उसे देखना चाहिए।

आपको NotificationsBroadcastReceivers के अंदर और Toast एस के अंदर उपयोग करना चाहिए।

7

अपने कारण & समाधान के लिए:

Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED"); 
List<ResolveInfo> infos = getPackageManager().queryBroadcastReceivers(intent, 0); 
for (ResolveInfo info : infos) { 
    System.out.println("Receiver name:" + info.activityInfo.name + "; priority=" + info.priority); 
} 

और बस के लिए GO एसएमएस प्रो बकवास अपने उत्पादन के माध्यम से देखो। यह शायद हास्यास्पद रूप से उच्च है।

+2

धन्यवाद एक मिलियन :)! अब मैं देखता हूं कि "जाओ एसएमएस प्रो" के लोगों ने अधिकतम रिसीवर को अधिकतम पूर्णांक मान (2147483647) के बराबर प्राथमिकता दी है। उनका ऐप शायद एसएमएस_RECEIVED पर abortBroadcast() को कॉल कर रहा है। तो क्या कोई तरीका है कि मैं उनके ऐप से लड़ सकता हूं? दस्तावेज़ीकरण कहता है कि प्राथमिकताओं के बराबर होने पर क्या होता है, लेकिन जैसा कि मुझे पता है कि "जाओ एसएमएस प्रो" ऐप को पहले कहा जाता है, मेरा एसएमएस_RECEIVED इरादा खपत करता है और मेरा ऐप परिणाम के रूप में नहीं कहा जाता है :( – ncreated

+0

यह "पहले जीत स्थापित है" अगर मुझे सही याद है। सबसे अच्छा शर्त ग्राहक को चेतावनी देना है कि एसएमएस प्रो एक ज्ञात समस्या है (संवाद, अधिसूचना या आपके पास क्या है) – Jens

+1

फिर से धन्यवाद। शायद सबसे अच्छा समाधान आपके द्वारा लिखे गए कुछ विस्तार का होगा: ऊपर दिए गए कोड का उपयोग करने के लिए और जांच करें कि अधिकतम प्राथमिकता वाले एसएमएस_RECEIVED इरादे के लिए पंजीकृत कोई अन्य रिसीवर है या नहीं। फिर उपयोगकर्ता को चेतावनी देने के लिए कि सूचीबद्ध ऐप्स किसी समस्या का कारण बन सकता है। – ncreated

2

जाओ एसएमएस प्रो प्राथमिकता 2^31-1 = 2147483647 है। इसलिए आपका ऐप कोई संदेश प्राप्त नहीं कर सकता है क्योंकि एसएमएस सेवा ने अन्य प्रसारणों को निरस्त कर दिया है।

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