- 根据视频中的讲解,获取uri
2.本应该获取到的Uri

截图很糊,也就是两个结果:
i. sms/raw
ii. sms/3
3.我获得的Uri是三个

我得到的三个Uri中没有sms/后面跟数字的,所以在后面的步骤match的时候结果都为-1
4.我的代码
package com.example.smsprovider;
import android.content.UriMatcher;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class VerifyCodeActivity extends AppCompatActivity {
private static final String TAG = "VerifyCodeActivity";
private EditText mPhoneNumEt;
private Button mCountDownBt;
private EditText mVerifyCodeEt;
private Button mCommitBt;
public static final int MATCH_CODE = 1;
private static UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
sUriMatcher.addURI("sms", "#", MATCH_CODE);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_verify_code);
initView();
initEvent();
//注册短信内容提供者的观察者
Uri uri = Uri.parse("content://sms/");
getContentResolver().registerContentObserver(uri, true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange, @Nullable Uri uri) {
Log.d(TAG, "selfChange ----------> " + selfChange);
Log.d(TAG, "uri ----------> " + uri);
Log.d(TAG, "sUriMatcher.match(uri) ================" + sUriMatcher.match(uri));
if (sUriMatcher.match(uri) == MATCH_CODE) {
Log.d(TAG, "the true uri ----------> " + uri);
}
}
});
}
/*按钮监听*/
private void initEvent() {
mCountDownBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//向服务器请求发送验证码到手机
String phoneNum = mPhoneNumEt.getText().toString().trim();
if (TextUtils.isEmpty(phoneNum)) {
Toast.makeText(VerifyCodeActivity.this, "手机号不能为空", Toast.LENGTH_SHORT).show();
return;
}
}
//TODO:向服务器请求发送验证码到手机
});
mCommitBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//检查内容
String phoneNum = mPhoneNumEt.getText().toString().trim();
String verifyCode = mVerifyCodeEt.getText().toString().trim();
if (TextUtils.isEmpty(phoneNum) || TextUtils.isEmpty(verifyCode)) {
Toast.makeText(VerifyCodeActivity.this, "验证码和手机号码都不可以为空", Toast.LENGTH_SHORT).show();
return;
}
}
});
}
/*初始化控件*/
private void initView() {
mPhoneNumEt = this.findViewById(R.id.phone_num_et);
mCountDownBt = this.findViewById(R.id.count_down_bt);
mVerifyCodeEt = this.findViewById(R.id.verify_code_et);
mCommitBt = this.findViewById(R.id.submit_bt);
}
}
5.我的模拟器版本

是模拟器版本的问题吗?
这个我遇到过,inbox是收信箱
如果你要体验的话,可以在android5.1的系统上体验。
嗯,重点是学会内容提供者。越往后的权限管得越严,拿短信这种事情基本上干不了。