Как сделать звонок прямо в Android

Я знаю, что это было очень просто сделать, но я сталкивался с очень странной проблемой. Я должен вызвать Полицию в ситуации опасности, просто нажав на кнопку. Поэтому я использовал следующий код для вызова.

Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:100"));
            callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            ctx.startActivity(callIntent);

Добавлено CALL_PHONE разрешение в AndroidManifest.xml . Проблема заключается в том, что она открывает 100 на панели набора, но не вызывает прямой вызов. Я хочу, чтобы это произошло сразу, когда пользователь нажимает кнопку.

Когда я попытался поставить +91 до 100, он автоматически вызывает номер, но почему для таких чисел требуется плюс. Итак, кто-то поможет мне решить эту проблему

4
Я подозреваю, что это может иметь какое-то отношение к «100», не являющемуся действительным номером телефона в американской телефонной системе. (Вероятно, это ошибка)
добавлено автор geoffspear, источник
Привет, Вы нашли решение для этого ?. Тем не менее это происходит.
добавлено автор MSD, источник

6 ответы

Из документации ACTION_CALL :

Примечание. Существуют ограничения, по которым приложения могут инициировать вызов; большинство приложений должны использовать ACTION_DIAL.

     

Примечание. Это намерение не может использоваться для вызова номеров экстренных служб. Однако приложения могут набирать номера экстренной помощи, используя ACTION_DIAL.

Поэтому кажется, что это по-другому.

4
добавлено
В частности, вам нужно разрешение CALL_PRIVILEGED , которое недоступно обычным приложениям SDK.
добавлено автор CommonsWare, источник

Лучший способ прямого вызова без вмешательства пользователя.

String uri = "tel:" + num.trim();
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(intent);
0
добавлено

Возможно, проблема в том, что система Android не распознает 100 как действительный номер телефона, вместо этого, если вы поместите код страны перед ней, тогда она работает нормально. Чтобы решить эту проблему, просмотрите эту библиотеку libnhonenumber . Вы могли бы использовать его что-то вроде этого

public static ArrayList extractPhoneNumber(String content) {

    ArrayList numbers = new ArrayList(0);

    PhoneNumberUtil instance = PhoneNumberUtil.getInstance();

    //Change IT with your contry code
    Iterable matches = instance.findNumbers(content, "IT");

    Iterator iterator = matches.iterator();

    while (iterator.hasNext()) {
        numbers.add(instance.format(iterator.next().number(), PhoneNumberFormat.INTERNATIONAL));
    }

    return numbers;
}
0
добавлено
private void phoneCall()
{
 String phoneCallUri = "tel:91";
 Intent phoneCallIntent = new Intent(Intent.ACTION_CALL);
 phoneCallIntent.setData(Uri.parse(phoneCallUri));
 startActivity(phoneCallIntent);
}
0
добавлено

A Long time passed. But may help someone else. If you want to call directly, you should use requestPermissions method.

1. Add this line to your manifest file:


2. Define a class variable in the activity class:

private static Intent phoneCallIntent; //If use don't need a member variable is good to use a static variable for memory performance.

3. Add these lines to the onCreate method of the activity:

final String permissionToCall = Manifest.permission.CALL_PHONE;
//Assume that you have a phone icon.
(findViewById(R.id.menuBarPhone)).setOnClickListener(new OnClickListener(){
    public void onClick(View view) {
        phoneCallIntent = new Intent(Intent.ACTION_CALL);
        phoneCallIntent.setData(Uri.parse(getString(R.string.callNumber))); //Uri.parse("tel:your number")
        if (ActivityCompat.checkSelfPermission(MainFrame.this, permissionToCall) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainFrame.this, new String[]{permissionToCall}, 1);
            return;
        }
        startActivity(phoneCallIntent);
    }
});

4. And for making a call immediately after clicking on Allow button, override onRequestPermissionsResult method:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == 1){
        final int permissionsLength = permissions.length;
        for (int i = 0; i < permissionsLength; i++) {
            if(grantResults[i] == PackageManager.PERMISSION_GRANTED){
                startActivity(phoneCallIntent);
            }
        }
    }

Когда пользователь дает разрешение, в следующий раз не будет диалогового окна, и звонок будет производиться напрямую.

0
добавлено

Существует два способа вызова/начала вызова: ACTION_CALL и ACTION_DIAL. ACTION_DIAL откроет только номер дозвона с заполненным номером, но позволяет пользователю фактически вызвать или отклонить вызов. ACTION_CALL немедленно вызовет номер и потребует дополнительного разрешения. Поэтому убедитесь, что у вас есть разрешение

0
добавлено
у вас есть мой вопрос первым @ user69226. Я знаю, что ACTION_CALL будет напрямую звонить по мобильным номерам, но это не вызовет номера экстренных служб, например, 100 и т. Д.
добавлено автор TNR, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)