2011-06-24 19 views
58

Quiero iniciar una actividad en mi método onReceive().Iniciar actividad dentro de onReceive BroadcastReceiver

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

aquí es 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); 
    // } 
} 
+1

¿Cuál es el problema que está recibiendo? –

+0

Ya tiene un código que inicia la actividad. Simplemente quítelo. – jamapag

+1

En realidad, el método startActivity no funciona en el método on receive ya que esta clase no extiende la actividad –

Respuesta

130

Has contexto pasado como parámetro al método onRecieve(), por lo que sólo tiene que utilizar:

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

que funciona, por supuesto, usted tiene que cambie el nombre de paquete y clase de actividad al suyo.

+0

sry no lo conseguí ¡¡pueden elaborar por favor !! –

+0

espero, claro – piotrpo

+0

@piotrpo si estoy registrando mi receptor de manifiestos, entonces puedo comenzar la actividad desde la clase de receptor de difusión usando context.getApplicationContext.startActivity() pero mi aplicación se bloqueó – user3233280

26

estoy usando esto y su trabajo en mi sitio:

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); 
+0

No está funcionando ... la nueva actividad se lanza con la pila posterior de otra actividad. La pila de actividades no se está aclarando ... ¡cualquier otra sugerencia! – CoDe

+0

funciona bien, lo he probado en mi aplicación –

0
Intent intent1 = new Intent(); 
intent1.setClassName(context.getPackageName(), MainActivity.class.getName()); 
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent1); 

para evitar que esas excepciones paquete

Cuestiones relacionadas