【问题标题】:Android App exits when request Runtime PermissionsAndroid 应用程序在请求运行时权限时退出
【发布时间】:2021-05-05 11:16:01
【问题描述】:

在下面的程序中,我在发送消息之前请求 SMS 权限。

在第一次应用程序执行时,当消息请求被确认时,会检查权限,如果没有,则会弹出一个请求用户允许应用程序的窗口。

发出此弹出窗口时,应用程序在后台移动。

我发现了很多关于这个问题的主题,但没有解决我的问题。例如。清单中缺少 nohistory 条目。

private void checkForSmsPermission() {

    if (ActivityCompat.checkSelfPermission(this,
            Manifest.permission.SEND_SMS) !=
            PackageManager.PERMISSION_GRANTED) {
     
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.SEND_SMS},
                MY_PERMISSIONS_REQUEST_SEND_SMS);
        return;

    } else {
        // Permission already granted. Enable the SMS button.
        return;
    }
}



@Override
public void onRequestPermissionsResult(int requestCode,  String[] permissions,  int[] grantResults) {
        if (requestCode == MY_PERMISSIONS_REQUEST_SEND_SMS)  {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
            }
        }
    }

public void send_command (String text){

    checkForSmsPermission();


    //Get the SmsManager instance and call the sendTextMessage method to send message
    SmsManager sms=SmsManager.getDefault();
    sms.sendTextMessage(recipient_number, null, text, null,null);


}

【问题讨论】:

  • 你的 logcat 在说什么?

标签: android permissions


【解决方案1】:

发生这种情况是因为您无论如何都在调用以下方法。

SmsManager sms=SmsManager.getDefault();
 sms.sendTextMessage(recipient_number, null, text, null,null);

只有在您确定自己拥有权限时才应该调用它们,否则您的应用会崩溃。 始终建议在权限验证成功时调用这些方法。但在你的情况下,无论用户是否提供了权限,它都会被调用。

【讨论】:

  • 谢谢,但仍有一些疑问。在发送消息之前,我请求许可....该方法是否仍被调用?我可以让这个方法等待权限吗?
  • 不,您正在调用 `checkForSmsPermission();` 但您不确定您是否获得了许可,无论如何,直到用户将看到许可对话框,您的 sms.sendTextMessage 将被调用并且会崩溃
  • 您需要第一次将其包装在onRequestPermissionsResult 中,下次再将其包装在checkForSmsPermission 的其他部分中
  • 如果您还需要什么,请告诉我
  • 非常感谢。清除。我会试试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2020-07-13
  • 2018-09-15
相关资源
最近更新 更多