SMSメッセージを選択するためにこのコードを書きました。会話リストを開き、SMS メッセージを選択して textview コントロールに表示したいと考えています。この目標を達成するために、会話リスト アクティビティを開くインテントを呼び出します。会話リストは正常に開かれますが、SMS メッセージを選択しても何も起こりません。アプリをトレースしたときに、SMS メッセージを選択しているときに onActivityResult が発生しないことを理解しましたが、アプリに戻るとこのメソッドが発生します。この問題を解決するために何ができるか知っていますか?
この目標に対する提案されたコードは次のとおりです。
private static final int PICK_SMS_MESSAGE=1;
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b=(Button) findViewById(R.id.btnPickSMS);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Uri uri=Uri.parse("content://mms-sms/conversations");
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("com.android.mms", "com.android.mms.ui.ConversationList");
//intent.setType("vnd.android-dir/mms-sms");
intent.setDataAndType(uri,"vnd.android-dir/mms-sms" );
Log.i("Log","Start");
startActivityForResult(intent, PICK_SMS_MESSAGE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("Log","Point2");
if(resultCode==RESULT_OK)
{
Log.i("Log","Point3");
if(requestCode==PICK_SMS_MESSAGE)
{
//Uri smsUri=data.getData();
//tv.setText();
Bundle bundle=data.getExtras();
Log.i("Log","Point4");
if(bundle!=null)
{
Object[] pdus=(Object[]) bundle.get("pdus");
for(Object o : pdus)
{
SmsMessage messages=SmsMessage.createFromPdu((byte[]) o);
tv.setText(messages.getDisplayMessageBody());
Log.i("Log","Point5");
}
}
}
}
//finish();
super.onActivityResult(requestCode, resultCode, data);
}