2015-06-14 8 views
5

चलाने के लिए मैं एक वर्ग जो BroadcastReceiver फैली है। एक एसएमएस प्राप्त करने पर, मैं बॉक्स में टेक्स्ट प्रदर्शित करने के लिए अपनी मुख्य गतिविधि कक्षा में जानकारी पास करना चाहता हूं (संलग्न करें, यदि पहले से ही टेक्स्ट मौजूद है)।BroadcastReceiver वर्ग से भेजा जा रहा है आशय वर्तमान गतिविधि

public class SmsReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) 
    { 
     Intent i = new Intent(context, MainActivity.class); 
      i.putExtra("updatedString","Hello"); 
      context.startActivity(i); 
    } 
} 

MainActivity.java

public class MainActivity extends Activity{ 

    private TextView results; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Bundle extras = getIntent().getExtras(); 
     if(extras!=null){ 
      results = (TextView) findViewById(R.id.results); 
      results.setVisibility(View.VISIBLE); 
      results.append(extras.getString("updatedString")); 
     } 

} 

मैं केवल एक गतिविधि वर्ग (MainActivity.java) है। हालांकि जब मैं ऐसा करता हूं तो मुझे अपवाद मिलता है गतिविधि को रोकने में असमर्थ। MainActivity

private BroadcastReceiver smsReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //you can update textBox here 
     handler.postDelayed(sendUpdatesToUI, 10); 
    } 
}; 

में
onCreate()

registerReceiver(smsReceiver, new IntentFilter(SMS_RECIEVED)); 

में और परिभाषित smsReciver एक runnable को परिभाषित:
1) आप इस तरह अपने MainActivity अंदर अपने प्रसारण को परिभाषित कर सकते हैं:

उत्तर

8

आप तीन तरीके हैं यूआई

अद्यतन करने के लिए

और अद्यतन विधि

private void update(String text) { 
    textView.setText(textView.getText().toString() + text); 
} 

2) अपनी गतिविधि और BroadCastReceiver

3) नई आशय के साथ अपनी गतिविधि शुरू अद्यतन करने के लिए वर्तमान खुली गतिविधि

Intent intent = new Intent(context, MainActivity.class); 
intent.putExtra("Key", "text"); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent); 

अद्यतन के बीच एक रिसीवर रजिस्टर :
समझाने विधि 2
01,235,MainActivity.class

onResume()

registerReceiver(broadcastReceiver, new IntentFilter(SmsReceiver.BROADCAST_ACTION)); 

में

onDestroy()

unregisterReceiver(broadcastReceiver); 

स्थानीय प्रसारण में (MainActivity.class में broadcastReceiver,)

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     updateUI(intent); 
    } 
}; 
private void updateUI(Intent intent) { 
    String text = intent.getStringExtra("key"); 
    textView.setText(textView.getText().toString() + text); 
} 

SmsReceiver.class
वैश्विक विशेषता

public static final String BROADCAST_ACTION = "your.package.name.displayevent"; 
private final Handler handler = new Handler(); 
Intent intent; 
Context context; 

onReceive()

handler.removeCallbacks(sendUpdatesToUI); 
handler.postDelayed(sendUpdatesToUI, 10); 

this.context = context;//you can retrieve context from onReceive argument 

this.intent = new Intent(BROADCAST_ACTION); 

में परिभाषित दो विधि

private Runnable sendUpdatesToUI = new Runnable() { 
    public void run() { 
     display(); 
    } 
}; 

private void display() { 
    intent.putExtra("key", text); 
    context.sendBroadcast(intent); 
} 
+0

मैं एसएमएसआरसीवर कक्षा से संदेश कैसे भेजूं।मैंने निम्नलिखित कोड लिखा है: इरादा i = नया इरादा ("SMS_RECIEVED"); i.putExtra ("अपडेटस्ट्रिंग", str); स्थानीय ब्रॉडकास्ट प्रबंधक mgr = LocalBroadcastManager.getInstance (संदर्भ); mgr.sendBroadcast (i); – user1692342

+0

आप किस तरह से उपयोग करना चाहते हैं? 1 या 2 या 3? – MHP

+0

मैं विधि 1 – user1692342

0

नीचे के रूप में अपने कोड को संशोधित करें।

public class SmsReceiver extends BroadcastReceiver { 
@Override 

public void onReceive(Context context, Intent intent) 
    { 
     Intent i = new Intent(context, MainActivity.class); 
      i.putExtra("updatedString","Hello");   i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      context.startActivity(i); 
    } 
} 

public class MainActivity extends Activity{ 

    private TextView results; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Bundle extras = getIntent().getExtras(); 
     if(extras!=null){ 
      results = (TextView) findViewById(R.id.results); 
      results.setVisibility(View.VISIBLE); 
      results.append(extras.getString("updatedString")); 
     } 

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     //handle your intent here.Note this will be called even when activity first created.so becareful to handle intents correctly. 
    } 

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