代码之家  ›  专栏  ›  技术社区  ›  mehdi

如何制作自定义的短信权限对话框

  •  0
  • mehdi  · 技术社区  · 6 年前

    我使用下面的代码从用户那里获得短信权限。但我希望在显示权限对话框时添加一些描述。我怎么能做到?或者是怎么做的?谢谢。

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
    
            if (checkSelfPermission(Manifest.permission.SEND_SMS)
                    == PackageManager.PERMISSION_DENIED) {
    
                Log.d("permission", "permission denied to SEND_SMS - requesting it");
                String[] permissions = {Manifest.permission.SEND_SMS};
    
                requestPermissions(permissions, PERMISSION_REQUEST_CODE);
    
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   HendraWD    6 年前

    基本上你可以创建一个 AlertDialog 在这里添加描述。下面是一个如何实现这一目标的例子

    try {
        new android.app.AlertDialog.Builder(activity)
                .setMessage("Your description about the permission")
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String[] permissions = {Manifest.permission.SEND_SMS};
                        requestPermissions(permissions, PERMISSION_REQUEST_CODE);
                    }
                })
                .create()
                .show();
    } catch (Exception e) {
        // handle exception in case context is not present / destroyed, etc
    }
    

    或者,您可以让用户在没有任何权限的情况下发送短信。在您的 Activity

    private boolean sendSms(final String phoneNumber, final String content) {
        Uri uri = Uri.parse("smsto:" + phoneNumber);
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        if (isIntentAvailable(intent)) {
            intent.putExtra("sms_body", content);
            startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
            return true;
        }
        return false;
    }
    
    private boolean isIntentAvailable(final Intent intent) {
        return getPackageManager()
                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
                .size() > 0;
    }