2012-07-03 30 views
1

我使用清单中定义一个reciever类像机器人 - 如何从另一个活动,从接收者类调用方法?

<receiver 
     android:name="com.escortme.basic.SMSReceiverActivity" 
     android:enabled="true"> 
     <intent-filter> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

听传入文本,但问题是我怎么叫这是手机显示当前活动的方法,从onrecieve SMSReceiverActivity中的方法?因此,例如,如果我目前在手机上的pol_viewactivity,然后我收到一个文本,我知道onrecieve方法发生在SMSReceiverActivity的背景中,但在接收方法中,如何调用方法返回来自pol_viewactivity?

回答

0

那么应该

1)把你的onReceive方法在你pol_viewactivity;或者,

2)SMSReceiverActivity提供一个监听和通过pol_viewactivity设置。

编辑:

在回答如何建立一个监听器。

在你SMSReceiverActivity,定义一个接口,

public interface ExampleListener { 
    onMsgReceive(String msg); 
} 

声明监听器和一个公共方法,

private ExampleListener listener; 

public void setExampleListener(ExampleListener listener) { 
    this.listener = listener; 
} 

BroadcastReceiveronReceive方法,

if (listener != null) { 
    listener.onMsgReceive("Your message to pass"); 
} 

在你的pol_viewactivity,找到方法设置听众类似于拨打setOnClickListener()的方式。如果您无法检索SMSReceiverActivity的实例以设置侦听器,请将侦听器设置为静态。我知道这不是一个美丽的方式,但在你的情况下,如果你不能改变设计,这种方式应该有所帮助。 (也许你可以在广播接收器隔离成一个类,做所有的处理在那里。)

+0

为1号)都pol_viewactivity和SMSReceiverActivity扩展其他类,所以我不了解如何为数字2做这个 )你能告诉我如何在代码中做到这一点吗? – omega

1

试试这个希望帮助ü

public class SMS extends Activity 
{ 

    Button btnSendSMS; 
    EditText txtPhoneNo; 
    EditText txtMessage; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);   
     btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
     txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
     txtMessage = (EditText) findViewById(R.id.txtMessage); 

     /* 
     Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
     sendIntent.putExtra("sms_body", "Content of the SMS goes here..."); 
     sendIntent.setType("vnd.android-dir/mms-sms"); 
     startActivity(sendIntent); 
     */ 

     btnSendSMS.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      {    
       String phoneNo = txtPhoneNo.getText().toString(); 
       String message = txtMessage.getText().toString();    
       if (phoneNo.length()>0 && message.length()>0)     
        sendSMS(phoneNo, message);     
       else 
        Toast.makeText(getBaseContext(), 
         "Please enter both phone number and message.", 
         Toast.LENGTH_SHORT).show(); 
      } 
     });   
    } 

    //---sends a SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    {  
     /* 
     PendingIntent pi = PendingIntent.getActivity(this, 0, 
       new Intent(this, test.class), 0);     
      SmsManager sms = SmsManager.getDefault(); 
      sms.sendTextMessage(phoneNumber, null, message, pi, null);   
     */ 

     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(DELIVERED), 0); 

     //---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
         Toast.makeText(getBaseContext(), "Generic failure", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NO_SERVICE: 
         Toast.makeText(getBaseContext(), "No service", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NULL_PDU: 
         Toast.makeText(getBaseContext(), "Null PDU", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_RADIO_OFF: 
         Toast.makeText(getBaseContext(), "Radio off", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     //---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(getBaseContext(), "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break;      
       } 
      } 
     }, new IntentFilter(DELIVERED));   

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);    
    }  
相关问题