在onReceive BroadcastReceiver中启动Activity

我想在我的onReceive()方法中开始一个活动。

 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(); } } } } 

这里是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, "im 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); // } } 

你有上下文作为parameter passing给onRecieve()方法,所以只需使用:

  @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); } 

它的工作原理,当然你必须改变包和活动类名称为你自己的。

我正在使用这个和它的工作在我的网站上:

 Intent intentone = new Intent(context.getApplicationContext(), DialogAct.class); intentone.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intentone);