Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Start Activity inside onReceive BroadcastReceiver

I want to start an activity in my onReceive() method.

package com.splashscreenactivity;  import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.widget.Toast;  public class SMSReceiver extends BroadcastReceiver {      public static String trigger_message = "";      @Override     public void onReceive(Context context, Intent intent) {         // ---get the SMS message passed in---         Bundle bundle = intent.getExtras();         SmsMessage[] msgs = null;         String str = "";         if (bundle != null) {             // ---retrieve the SMS message received---             Object[] pdus = (Object[]) bundle.get("pdus");             msgs = new SmsMessage[pdus.length];             for (int i = 0; i < msgs.length; i++) {                 msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);                 str += "SMS from " + msgs[i].getOriginatingAddress();                 str += " :";                 trigger_message = msgs[i].getMessageBody().toString();                 str += trigger_message;                 str += "\n";             }             // ---display the new SMS message---             Toast.makeText(context, str, Toast.LENGTH_SHORT).show();             if (trigger_message.equals("dx")) {                 Toast.makeText(context, "I am triggered", Toast.LENGTH_LONG)                         .show();                 // /////////////////////////                 // i want to start here                 // ////////////////////////                 // MainScreenActivity.trigger="Now";                 // Intent i = new Intent(context,GPS.class);                 // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                 // context.startActivity(i);             } else {                 Toast.makeText(context, "I am not triggered,  Bbyz!!!",                         Toast.LENGTH_LONG).show();             }         }     } } 

here is GPS.class

package com.splashscreenactivity;  import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.telephony.SmsManager; import android.telephony.SmsMessage; import android.widget.TextView; import android.widget.Toast;  public class GPS extends Activity implements LocationListener {      TextView latitude, logitude;      /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.gps);         LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f,                 this);         Toast.makeText(this, "i m started", Toast.LENGTH_LONG);         // latitude = (TextView)findViewById(R.id.txtLat);         // logitude = (TextView)findViewById(R.id.txtLongi);         // latitude.setText("Loading...");         // logitude.setText("Loading...");     }      String LATTITUDE;     String LOGITUDE;      @Override     public void onLocationChanged(Location location) {         double lat = location.getLatitude();         double lag = location.getLongitude();         LATTITUDE = Double.toString(lat);         LOGITUDE = Double.toString(lag);         // latitude.setText(LATTITUDE);         // logitude.setText(LOGITUDE);         // SmsManager sm = SmsManager.getDefault();         // // here is where the destination of the text should go         // String number = "5556";         // sm.sendTextMessage(number, null,         // "latitude="+latitude.getText()+"\nlongitude="+logitude.getText(),         // null, null);     }      @Override     public void onProviderDisabled(String arg0) {     }      @Override     public void onProviderEnabled(String arg0) {     }      @Override     public void onStatusChanged(String arg0, int arg1, Bundle arg2) {     }     // /** Register for the updates when Activity is in foreground */     // @Override     // protected void onResume()     // {     // super.onResume();     // lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f,     // this);     // }     //     // /** Stop the updates when Activity is paused */     // @Override     // protected void onPause() {     // super.onPause();     // lm.removeUpdates(this);     // } } 
like image 965
Abhishek Gupta Avatar asked Jun 24 '11 13:06

Abhishek Gupta


People also ask

What is the role of the onReceive () method in the BroadcastReceiver?

Retrieve the current result extra data, as set by the previous receiver. This can be called by an application in onReceive(Context, Intent) to allow it to keep the broadcast active after returning from that function.

Can broadcast receiver run in background?

A broadcast receiver will always get notified of a broadcast, regardless of the status of your application. It doesn't matter if your application is currently running, in the background or not running at all.

What is the life cycle of BroadcastReceiver?

1) I have an Activity. This Activity starts a service, which in turn creates and registers a BroadcastReceiver. 2) I have an Activity. This Activity creates and registers a BroadcastReceiver.

How do I send data from BroadcastReceiver to activity?

Step 1. Open your project where you want to implement this. Step 2. Open your BroadcastReceiver class from where you pass data to activity inside your onReceive() you need to start intent and pass data inside intent and start sendBroadcast() as shown bellow.


1 Answers

You have context passed as parameter to onRecieve() method, so just use:

 @Override     public void onReceive(Context context, Intent intent) {         //start activity         Intent i = new Intent();         i.setClassName("com.test", "com.test.MainActivity");         i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);         context.startActivity(i);     } 

It works, of course you have to change package and activity class name to your own.

like image 187
piotrpo Avatar answered Sep 17 '22 13:09

piotrpo