2011-12-30 43 views
1

私はSMSアプリケーションを開発しています。私はMessageURIをSMSのインテントのデータとして渡していると "SENT"インテントを受信できません。 smsはキューに入れられた状態にあります。 OnReceiveは呼び出されません!SMS受信者がインテントを受信して​​いない

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

答えて

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は「コンテンツ」というデータスキームを認識しません。私がそれを「マイコンテンツ」と呼ぶなら、すべてが機能します。あなたはこのコードで遊んで、さらなる詳細をキャッチすることができます。

+0

ありがとうございます@Yuryそれは正常に動作します。しかし、私はSMSにアクセスしています。したがって、uriは "content:// sms /"という形式になります。しかし、私が "mycontent"を "content"に置き換えていれば.OnReceiveは呼び出されません。事前に感謝します – siva

+0

私はこれを説明する方法を知らない。他のケースでは、データのタイプを指定する必要があります。しかし、正確な答えを探してみてください。 – Yury

+0

ありがとう@Yury !!! – siva

関連する問題