android sendTextMessage每发送一条短信都弹权限提示

做了一个可以多选联系人的页面,选择之后,sendTextMessage发送多条短信,发送之前有检查发送短信的授权,没授权将请求授权,授权成功后才发送。结果发现Oppo A1601,判断时是已授权,直接走sendInviteSMS(); 调用sendTextMessage逐条发短信,但是每发一条短信都会弹一次授权提示。

经查,设置里面应用是已经被授权发送短信,是Oppo A1601自带的安全中心对发送短信权限进行了限制,使用时询问。改成允许是没问题的。

就好似,广州到北京,出发之前查询道路是否是好的(是否授权),坏的就修好再出发(请求授权),结果道路是好的情况下出发,半路有收费站(安全中心),不给钱就不让过(不授权就发送失败),并且每次经过都要收费(每条短信都弹授权提示)。

AppExecutors.get().execute(TaskType.BACKGROUND, new Callable<Boolean>() {
    @Override
    public Boolean call() throws Exception {
        return PackageManager.PERMISSION_GRANTED ==
                ContextCompat.checkSelfPermission(getContext(), Manifest.permission.SEND_SMS);
    }
}, new Consumer<Boolean>() {
    @Override
    public void accept(Boolean result) {
        if (result) {
            Log.d(TAG,"SEND_SMS granted");
            sendInviteSMS();
        } else {
            Log.d(TAG,"requestPermission SEND_SMS");
            PermissionGen.needPermission(ChooseContactFragment.this, SEND_SMS_PERMISSION_REQUEST_CODE, Manifest.permission.SEND_SMS);
        }
    }
});


实现这个功能,需要用到 Android短信 API。以下是实现步骤: 1. 在 AndroidManifest.xml 文件中添加短信读写权限: ```xml <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> ``` 2. 在布局文件中添加一个 EditText 用于输入短信内容,一个 Button 用于触发发送短信的操作: ```xml <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入短信内容" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送短信" /> ``` 3. 在 Activity 中获取 EditText 和 Button,并设置 Button 的点击事件: ```java public class MainActivity extends AppCompatActivity { private EditText editText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String message = editText.getText().toString(); sendSms(message); } }); } private void sendSms(String message) { SmsManager smsManager = SmsManager.getDefault(); // 生成 n 条短信 int n = 5; for (int i = 0; i < n; i++) { // 发送短信 smsManager.sendTextMessage("5554", null, message, null, null); // 模拟接收短信 ContentValues values = new ContentValues(); values.put("address", "5554"); values.put("date", System.currentTimeMillis()); values.put("read", 1); values.put("type", 1); values.put("body", message); getContentResolver().insert(Uri.parse("content://sms/"), values); } Toast.makeText(this, "发送成功!", Toast.LENGTH_SHORT).show(); } } ``` 上述代码中,我们使用 SmsManager 类的 sendTextMessage 方法发送短信,同时使用 ContentResolver 插入接收短信的记录。需要注意的是,在模拟器中,短信的接收者号码应该是 "5554",因为这是模拟器默认的号码。如果是真机调试,需要修改为真实的手机号码。 这样,当用户点击发送短信按钮时,就会生成 n 条短信,并发送给号码为 "5554" 的接收者。你可以根据自己的需求,修改代码实现更加灵活的短信生成和发送方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值