как мне позвонить сразу при открытии контакта - PullRequest
0 голосов
/ 14 июня 2019

проблема, когда я нажимаю на кнопку выбора контакта и выбираю контакт, не набираю номер, я хочу при выборе номера звонить напрямую

buttoncontact = findViewById(R.id.choosecontact);


public void choosecontact1 (View view){

     Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

   intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(intent, PICK_CONTACT)


}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String call = buttoncontact.getText().toString();


    if ((requestCode == 1) && (resultCode == RESULT_OK)) {
        Cursor cursor = null;
        try {
            Uri uri = data.getData();
            cursor = getContentResolver().query(uri, new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER }, null, null, null);
            if (cursor != null && cursor.moveToNext()) {
                String phone = cursor.getString(0);

// Проблема по тому коду

                Intent intent = new Intent(Intent.ACTION_CALL);
                intent.setData(Uri.parse(String.valueOf("tel:" + CONTENT_TYPE)));

// я хочу открыть телефонный контакт и позвонить напрямую

                if (ActivityCompat.checkSelfPermission(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(intent);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 14 июня 2019
  1. Добавить разрешение в файле манифеста:

  2. Сделать функцию вызова телефонного номера

    приватная статическая final int CALL_REQUEST = 100;

     private void callPhoneNumber(){
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
            {
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                   ActivityCompat.requestPermissions(ProfileActivity.this, new String[]{Manifest.permission.CALL_PHONE}, CALL_REQUEST);
    
                    return;
                }
            }
    
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:9879879879" ));
            startActivity(callIntent);
    
        }
    
  3. Выше 23 уровня API, необходимо запросить разрешение во время выполнения вызова, и если пользователь разрешит это, то будет указан метод ниже:

    @ Override public void onRequestPermissionsResult (разрешения типа int requestCode, String [], int [] grantResults) { if (requestCode == CALL_REQUEST) { if (grantResults [0] == PackageManager.PERMISSION_GRANTED) { callPhoneNumber (); } еще { Toast.makeText (ProfileActivity.this, «Отказано в доступе», Toast.LENGTH_SHORT) .show (); } } }

0 голосов
/ 14 июня 2019

Что такое "CONTENT_TYPE"?Разве это не телефонная строка, которую вы только что получили?

intent.setData(Uri.parse("tel:" + phone));
...