1

マニフェストで定義されている受信者クラスを使用しています

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

着信テキストをリッスンしますが、問題は、SMSReceiverActivityのonrecieveメソッドから、電話が表示している現在のアクティビティであるメソッドをどのように呼び出すかです。

たとえば、現在電話でpol_viewactivityを使用している場合、テキストを受信します。onrecieveメソッドがSMSReceiverActivityからバックグラウンドで発生したことはわかっていますが、onreceiveメソッドでは、pol_viewactivityからメソッドを呼び出すにはどうすればよいですか。

4

2 に答える 2

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);               
    }    
于 2012-07-03T03:30:28.923 に答える
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;
}

onReceive方法ではBroadcastReceiver

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

pol_viewactivityで、を呼び出す方法と同様にリスナーを設定する方法を見つけますsetOnClickListener()。リスナーを設定するためにのインスタンスを取得できない場合はSMSReceiverActivity、リスナーを静的にします。これは美しい方法ではないことは承知していますが、あなたの場合、デザインを変更できない場合は、この方法が役立つはずです。(おそらく、BroadcastReceiverを単一のクラスに分離し、そこですべての処理を行うことができます。)

于 2012-07-03T02:21:57.593 に答える