2012-04-05 14 views
7

मुझे क्या करना कोशिश कर रहा हूँ .. कि संख्या अपने आवेदन करने के लिए संदेश भेजता है जो करने के लिए, BraodcastReceiver को पास किया जाता है ... लेकिन अशक्त अब तक या तो मैं हो रही है या BroadcastReceiver बस दुर्घटनाओं हैब्रॉडकास्ट रिसीवर को डेटा कैसे पास करें?

यहाँ

है मेरी CreateMessage वर्ग से BroadcastReceiver के लिए आशय ...

 Intent intent = new Intent(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("phN", phoneNo); 
     intent.putExtras(bundle); 
     startActivity(intent); 

और BroadcastReceiver (SmsReceiver वर्ग) में मैं इस तरह के इरादे को पकड़ने के लिए कोशिश कर रहा हूँ ..

public void onReceive(Context context, Intent intent) { 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    try{ 
    //receiveNumbers = intent.getExtras().get("phN").toString(); 
     String receiveNumbers = intent.getStringExtra("phN"); 
     Toast.makeText(context, receiveNumbers, Toast.LENGTH_LONG).show(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

मेरे प्रकट फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.AEM_n" 
     android:versionCode="2" android:versionName="2.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS"/> 
    <uses-permission android:name="android.permission.READ_SMS"/>  
    <uses-permission android:name="android.permission.SEND_SMS"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> 
     <activity android:name=".new_menu" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:label="@string/app_name" 
      android:name=".SetEvent" > 
      <intent-filter> 
       <action android:name="com.AEM_n.SETEVENT" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      </activity> 
      <activity 
      android:label="@string/app_name" 
      android:name=".AddParticipants" /> 
      <activity 
      android:label="@string/app_name" 
      android:name=".CreateMessage" /> 
      <activity 
      android:label="@string/app_name" 
      android:name=".DataBaseClass" /> 
      <activity 
      android:label="@string/app_name" 
      android:name=".IntentReceiver"/> 
      <activity 
      android:label="@string/app_name" 
      android:name=".SmsReceiver" 
      /> 
      <receiver android:name=".SmsReceiver" android:exported="true"> 
      <intent-filter android:priority="999"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
      </intent-filter> 
      </receiver> 
    </application> 

</manifest> 

मैं पहले से ही सभी Stackoverflow दिए गए उत्तर की कोशिश की है ... लेकिन कोई फायदा नहीं ...

कृपया लोग मुझे बताओ मैं कहाँ जा रहा हूँ गलत ... धन्यवाद!

त्रुटि लॉग:

04-07 02:34:02.770: ERROR/AndroidRuntime(25593): FATAL EXCEPTION: main 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.myapp.myaction (has extras) } in [email protected] 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.os.Handler.handleCallback(Handler.java:587) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.os.Looper.loop(Looper.java:123) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.app.ActivityThread.main(ActivityThread.java:3701) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at dalvik.system.NativeStart.main(Native Method) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593): Caused by: java.lang.NullPointerException 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at com.AEM_n.SmsReceiver.onReceive(SmsReceiver.java:37) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709) 
04-07 02:34:02.770: ERROR/AndroidRuntime(25593):  ... 9 more 
+1

इराद वर्ग में 'putExtra() 'विधि है। स्पष्ट 'बंडल' निर्माण की कोई ज़रूरत नहीं है। साथ ही, 'स्टार्टएक्टिविटी() 'रिसीवर प्रसारित करने के इरादे को वितरित नहीं करता है - यह एक गतिविधि शुरू करता है। –

+0

इस प्रसारण को प्रसारित करने का अर्थ है 'sendBroadcast' और 'sendOrderedBroadcast' का उपयोग करना? –

+0

आपको प्रसारण की आवश्यकता क्यों है ?? आपका लक्ष्य दो गतिविधियों के बीच डेटा पास करना है? और क्या? – iTurki

उत्तर

22

होगा '@Jason रों उदाहरण के बाद ... मैं इस किया था ...

MainActivity में या से किसी भी गतिविधि मैं इस

किया जहां मेरी SmsReceiver कक्षा में से

Intent intent = new Intent("my.action.string"); 
intent.putExtra("extra", phoneNo); \\ phoneNo is the sent Number 
sendBroadcast(intent); 

और फिर आशय भेजना चाहते हैं

public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    Log.i("Receiver", "Broadcast received: " + action); 

    if(action.equals("my.action.string")){ 
    String state = intent.getExtras().getString("extra"); 

    } 
} 

और Manifest.xml में मैं "my.action.string" जोड़ा हालांकि यह एक विकल्प था ..

<receiver android:name=".SmsReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     <action android:name="my.action.string" /> 
     <!-- and some more actions if you want --> 
    </intent-filter> 
</receiver> 

आकर्षण की तरह काम किया !!

+0

मैं एक बहुत ही समान धारणा पर काम कर रहा हूं कि मेरे ऐप को संभालने की जरूरत है। मेरे मामले में मुझे एक इंटर-डिवाइस तंत्र के माध्यम से डेटा पास करना होगा, जिसे मैंने एक डिवाइस से दूसरे डिवाइस में एसएमएस होने के लिए परिभाषित किया है। मूल्यों को मंजूरी देकर, आपके द्वारा किए गए डेटा को भेजना संभव है? एसएमएस प्राप्त होने पर मेरे ऐप को डिफ़ॉल्ट ऐप कैसे बनाया जाए? – JPerk

0

आप एक Activity शुरू करने के बजाय Intent प्रसारण।

आप कोई कार्रवाई नहीं की और Intent करने के लिए कोई घटक नाम सेट: बदलने के लिए

startActivity(intent); 

को
sendBroadcast(intent); 

अद्यतन की कोशिश करो। निम्नलिखित के रूप में आशय बनाने का प्रयास करें:

Intent intent = new Intent(context, YourReceiver.class); 
intent.putExtra("phN", phoneNo); 
sendBroadcast(intent); 
+0

बस कोशिश की ... शून्य –

+0

बिल्कुल क्या शून्य? – pepyakin

+0

मेरी प्राप्त करने वाली कक्षा में, 'स्ट्रिंग प्राप्तNumbers = intent.getStringExtras ("phN"; ' –

0

तुम इतनी तरह एक प्रसारण भेजना होगा:

Intent intent = new Intent(action); 
intent.putExtra("phN", phoneNo); 
sendBroadcast(intent); 

action पैरामीटर String कि कार्रवाई तुम्हारे साथ BroadcastReceiver पंजीकृत को संबद्ध करता है। तो अगर आप इतने की तरह अपने रिसीवर पंजीकृत:

MyBroadcastReceiver receiver = new MyBroadcastReceiver(); 
registerReceiver(receiver, new IntentFilter("com.myapp.myaction")); 

तो action"com.myapp.myaction"

+0

मैं अपने ब्रॉडकास्ट रिसीवर को कहां पंजीकृत कर सकता हूं? मेरी गतिविधि कक्षा में? –

+0

हां, आम तौर पर 'ऑनक्रेट()' विधि में। 'ऑनडिस्ट्रॉय() 'विधि में' unregisterReceiver (रिसीवर) 'को कॉल करना भी सुनिश्चित करें (जिसका अर्थ है कि आपको रिसीवर के लिए क्लास संदर्भ होना होगा) –

+0

कृपया मेरी मैनिफेस्ट फ़ाइल देखें ... मैंने आपके कोड की कोशिश की ... लेकिन एप्लिकेशन क्रैश हो रहा है। –

-2

startactivity.it के बजाय sendbroadcast का उपयोग करें .. काम करेगा .. !!

0

आपकी समस्या बहुत सरल है। यह पर्याप्त है कि इस तरह के रिकिव() कोड को बदलें:

public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    Log.i("Receiver", "Broadcast received: " + action); 

    if(action.equals("my.action.string")){ 
     String state = bundle.getString("phN"); 

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