2011-06-24 126 views
58

內活動我想在我的onReceive()方法啓動的活動。開始的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, "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

有什麼問題你得到? –

+0

您已擁有啓動活動的代碼。只是取消它的評論。 – jamapag

+1

其實startActivity方法不是在上接收方法的工作,因爲這不是階級從logcat中取消註釋該代碼I M獲得強制退出在我的模擬器 –

回答

130

爲參數你已經上下文傳遞給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); 
    } 

它的工作原理,你當然得將包和活動類名更改爲您自己的。

+0

sry我沒有得到它可以詳細闡述! –

+0

希望,這是明確的 – piotrpo

+0

@piotrpo如果IM從清單註冊我的廣播reciever然後我可以使用context.getApplicationContext.startActivity()從廣播reciever類開始活動,但我的應用程序崩潰 – user3233280

26

我用這和它在我的網站的工作:

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

它不工作...新的活動與其他Activity的後退堆棧一起啓動。活動堆棧不清晰..任何其他建議! – CoDe

+0

其工作正常,我已經在我的應用程序中測試過它 –

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

防止這些包例外

相關問題