如何在另一个类的活动中设置监听器?

时间:2014-03-25 18:29:03

标签: java android android-intent sms

我正在处理需要读取传入消息的应用程序。现在,我发现我需要使用BroadcastReceiver类中的onReceive方法。现在我知道java不允许扩展两个类,所以我如何让它工作,我已经坚持这个很长一段时间,请帮助!如果还有其他方法可以做到这一点,请报价。

  

公共类SMS扩展活动{       按钮btnSendSMS;       EditText txtPhoneNo;       EditText txtMessage;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sms);        

    btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
    txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);

    btnSendSMS.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {                
            String phoneNo = txtPhoneNo.getText().toString();                 
            if (phoneNo.length()>0)                
                sendSMS(phoneNo, phoneNo);               
            else
                Toast.makeText(getBaseContext(), 
                    "Please enter a valid Phone Number.", 
                    Toast.LENGTH_SHORT).show();
        }
    });        
}
private void sendSMS(String phoneNumber, String message)
{        
    PendingIntent pi = PendingIntent.getActivity(this, 0,
        new Intent(this, SMS.class), 0);                
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, pi, null);        
}

Context context = getApplicationContext();
Intent intent = new Intent();
object.onReceive(context, intent); }
     

类SMSBroadcastReceiver扩展BroadcastReceiver {

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";

@Override
public void onReceive(Context context, Intent intent) {
     Log.i(TAG, "Intent recieved: " + intent.getAction());

      Toast.makeText(context, "HI", Toast.LENGTH_SHORT).show();
        if (intent.getAction().equals(SMS_RECEIVED)) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[])bundle.get("pdus");
                final SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                }
                if (messages.length > -1) {
                    Toast.makeText(context, "Message recieved: " + messages[0].getMessageBody(), 7000).show();
                }
            }
        }
   } }

1 个答案:

答案 0 :(得分:0)

您无需扩展两个类(这在Java中是不可能的,也从不需要)来实现您的目标。要获取最后一条消息,只需创建一个静态消息变量,可以在SMSBroadcastReceiver中说明并将该变量设置为onreceive中收到的最新消息。可以使用SmsReceiver.latestmessage

在整个应用中访问此静态变量