Смс отправлено получатель не получает намерение - PullRequest
1 голос
/ 30 декабря 2011

Я занимаюсь разработкой приложения для SMS-сообщений и не могу получить намерение "SENT", если передаю MessageURI в качестве данных в намерении для SMS. Исключение не происходит, а SMS находится в состоянии очереди.OnReceive не вызывается !!!

public class Sms_SendActivity extends Activity {
    PendingIntent sentPI;
    String Sent = "SENT_SMS";
    BroadcastReceiver br;
    Button btnSend;
    Context mcontext;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Uri uri = Uri.parse("Content://sms/2");
        mcontext = getApplicationContext();
        sentPI = PendingIntent.getBroadcast(this,0,new Intent(Sent,uri),0);
        btnSend = (Button)findViewById(R.id.send);
br = new BroadcastReceiver() {

            @Override
            public void onReceive(Context context, Intent intent) {
                Log.w("Check","Inside On Receiver");
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(mcontext,"Inside Sms sent", Toast.LENGTH_SHORT).show();
                    Log.w("Check"," URI "+intent.getData().toString());
                    break;

                default:
                    Toast.makeText(mcontext,"failure", Toast.LENGTH_SHORT).show();
                    break;
                }
                unregisterReceiver(br);
            }
        };

        btnSend.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                SmsManager sms = SmsManager.getDefault();
                sms.sendTextMessage("1-212-555-1212", null, "Hi there", sentPI, null);
                Log.w("Check","Sms Queued");
                try {
                    registerReceiver(br, new IntentFilter(Sent,"content://sms"));
                } catch (MalformedMimeTypeException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        });

    }
}

Можете ли вы мне помочь !!!

Спасибо

1 Ответ

0 голосов
/ 30 декабря 2011

Я немного изменил ваш код. В моем случае это работает:

public class DynBroadCastSMSActivity extends Activity {


private static final String TAG = DynBroadCastSMSActivity.class.getSimpleName();

PendingIntent sentPI;
String Sent = "SMS_SENT";
Button btnSend;
Context mContext;

BroadcastReceiver br = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.w("Check", "Inside On Receiver");
    }
};

@Override
protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction(Sent);
    filter.addDataScheme("mycontent");
    registerReceiver(br, filter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(br);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Uri uri = Uri.parse("mycontent://sms");
    Intent intent = new Intent(Sent);
    intent.setData(uri);
    mContext = getApplicationContext();
    sentPI = PendingIntent.getBroadcast(this, 0, intent, 0);
    btnSend = (Button) findViewById(R.id.send);



    btnSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage("5554", null, "Hi there", sentPI,
                    null);
            Log.w("Check", "Sms Queued");
        }
    });

}

}

Проблема была в следующем. Android не распознает схему данных, называемую «контентом». Если я называю это "mycontent", все работает. Вы можете поиграть с этим кодом, чтобы получить дополнительную информацию.

...