Java android中的电话

Java android中的电话,java,android,Java,Android,我用下面的代码打电话。但电话不通。有人能帮我吗?我也给了舱单电话许可 call = (TextView) findViewById(R.id.GuestPhoneNo1); call.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String no = call.g

我用下面的代码打电话。但电话不通。有人能帮我吗?我也给了舱单电话许可

 call = (TextView) findViewById(R.id.GuestPhoneNo1);
        call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String no = call.getText().toString();
            //    Toast.makeText(Accepted_Details.this, no, Toast.LENGTH_SHORT).show();
                Intent callIntent = new Intent(Intent.ACTION_CALL);
                callIntent.setData(Uri.parse("tel:" + no));


                /*if (ActivityCompat.checkSelfPermission(Accepted_Details.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions, and then overriding
                    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                    //                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
                    return;
                }*/
                startActivity(callIntent);
            }

即使在清单文件中添加了权限,您也需要在运行调用代码之前请求权限

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MAKE_CALL_PERMISSION_REQUEST_CODE);
整个事情可能是这样的

public class MainActivity extends AppCompatActivity {

private static final int MAKE_CALL_PERMISSION_REQUEST_CODE = 1;
private Button dial;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dial = (Button) findViewById(R.id.dial);
    final EditText numberToDial = (EditText) findViewById(R.id.number);

    dial.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String phoneNumber = numberToDial.getText().toString();

            if (!TextUtils.isEmpty(phoneNumber)) {
                if (checkPermission(Manifest.permission.CALL_PHONE)) {
                    String dial = "tel:" + phoneNumber;
                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(dial)));
                } else {
                    Toast.makeText(MainActivity.this, "Permission Call Phone denied", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "Enter a phone number", Toast.LENGTH_SHORT).show();
            }
         }
    });

    if (checkPermission(Manifest.permission.CALL_PHONE)) {
        dial.setEnabled(true);
    } else {
        dial.setEnabled(false);
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MAKE_CALL_PERMISSION_REQUEST_CODE);
    }
}

private boolean checkPermission(String permission) {
    return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED;
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch(requestCode) {
        case MAKE_CALL_PERMISSION_REQUEST_CODE :
            if (grantResults.length > 0 && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                dial.setEnabled(true);
                Toast.makeText(this, "You can call the number by clicking on the button", Toast.LENGTH_SHORT).show();
            }
            return;
    }
}
}

您可以使用以下代码, 我还为上面的棉花糖添加了权限弹出窗口

    Uri call = Uri.parse("tel:" + mobile_number);
    Intent surf = new Intent(Intent.ACTION_CALL, call);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(TrackActivity.this, Manifest.permission.CALL_PHONE)) {
            ActivityCompat.requestPermissions(TrackActivity.this, new String[]{Manifest.permission.CALL_PHONE}, EXTERNAL_STORAGE_PERMISSION_CONSTANT);
        } else if (permissionStatus.getBoolean(Manifest.permission.CALL_PHONE, false)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(TrackActivity.this);
            builder.setTitle("Need call Permission");
            builder.setMessage("This app needs call permission.");
            builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
                    Toast.makeText(getBaseContext(), "Go to Permissions to Grant call", Toast.LENGTH_LONG).show();
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.show();
        } else {
            ActivityCompat.requestPermissions(TrackActivity.this, new String[]{Manifest.permission.CALL_PHONE}, EXTERNAL_STORAGE_PERMISSION_CONSTANT);
        }

        SharedPreferences.Editor editor = permissionStatus.edit();
        editor.putBoolean(Manifest.permission.CALL_PHONE, true);
        editor.apply();

    } else {
        startActivity(surf);
    }

你看到什么错误了吗?