2011-12-30 82 views
1

我正在开发一个短信应用程序,我不能够接收“发送”的意图,如果我传递MessageURI作为意图的SMS.No异常发生和短信处于排队状态。 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(); 
       } 

      } 
     }); 

    } 
} 

你能帮帮我!!!

谢谢

+0

我在做类似的事情! http://stackoverflow.com/questions/14571564/android-pendingintent-extras-not-received-by-broadcastreceiver/14612215#14612215 – toobsco42 2013-01-31 07:37:03

回答

0

我修改了一下你的代码。在我的情况下,它的工作原理:

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”,那么一切正常。你可以玩这个代码来获得更多的细节。

+0

谢谢@Yury它工作正常。但我正在访问短信。所以uri的形式是“content:// sms /”。但是如果我用 “content”替换“mycontent”.OnReceive没有被调用。你能澄清一下吗?在此先感谢 – siva 2011-12-30 17:51:25

+0

我不知道如何解释这一点。我认为在其他情况下,你应该指定你的数据的类型。但试着寻找确切的答案。 – Yury 2011-12-30 18:36:09

+0

谢谢@Yury !!! – siva 2011-12-30 19:22:19