Як змусити відкрити дозвон із відображенням номера телефону?


193

Мені не потрібно телефонувати на номер телефону, мені просто потрібен дзвінок, щоб відкрити номер телефону, який уже відображається. Що Intentя повинен використовувати для досягнення цього?

Відповіді:


532

Два шляхи її досягнення.

1) Потрібно запустити дозвон через код, без взаємодії з користувачем.

Вам потрібно Action_Dial,

Використовуючи код нижче, він відкриє Dialer із вказаним номером

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

Потрібен префікс 'tel:' ; інший буде викинуто наступний виняток: java.lang.IllegalStateException: Не вдалося виконати метод діяльності.

Action_Dial не вимагає дозволу.

Якщо ви хочете ініціювати дзвінок безпосередньо без взаємодії з користувачем , ви можете використовувати дії Intent.ACTION_CALL. У цьому випадку ви повинні додати такий дозвіл у свій AndroidManifest.xml:

<uses-permission android:name="android.permission.CALL_PHONE" />

2) Потрібно користувачеві натиснути на рядок Phone_Number і розпочати дзвінок.

android:autoLink="phone" 

Потрібно використовувати TextView із властивістю нижче.

android: autoLink = "телефон" android: linksClickable = "true" властивість textView

Вам не потрібно використовувати наміри або отримувати дозвіл цим способом.


9
Це чудово, і він відрізняється від Намір.ACTION_CALL тим, що він не дзвонить одразу
Amt87

Чи потрібен дозвіл ACTION_DIAL, або це робить лише ACCESS_CALL?
Марк Плано-Лесей

1
Це працює і з номерами телефонів з Данії :) Не потрібно додавати +45 перед цим номером. Це чудово працює просто
розбираючи

1
У мене виникли проблеми з кнопкою "назад" після відкриття дозвону за новим наміром. Я можу повернутися до своєї програми лише за допомогою 3-х натискань на кнопку назад (вона показує мені кілька екранів набору номера, які я не відкривав - сам набиральник, створити новий контактний екран, вибране). Хтось знає, як повернутися до програми лише одним натисканням на кнопку назад?
кашло

2
2012 рік ... Старі добрі часи. Це політично правильний 2018 рік, великі компанії продають дані користувачів, і наші додатки повинні мати справу з бюрократією Android лише для того, щоб НЕ підтримувати SMS та телефонні дзвінки.
Джош

52

Відповідь досить пізно, але якщо у вас є TextViewте, що ви показуєте номер телефону, то вам взагалі не потрібно мати справу з намірами, ви можете просто скористатися атрибутом XML android:autoLink="phone"і ОС автоматично ініціює ACTION_DIALнаміри.


Дуже швидкий підхід!
Таслім Осені

7

Гаразд, на це питання буде дуже пізно відповісти. Але ось лише один зразок, якщо ви хочете зробити це в Котліні .

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

Думав, що це може комусь допомогти.


2

Як згадувалося вище @ashishduh, використання android:autoLink="phoneтакож є хорошим рішенням. Але цей варіант має один недолік, він не працює з усіма довжинами номерів телефону. Наприклад, номер телефону з 11 номерів не працює з цією опцією. Рішення полягає в префіксації телефонних номерів кодом країни.

Приклад:

08034448845 не буде працювати

але +2348034448845буде


1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

Ось так можна безпосередньо відкрити призначений номер мітки EditText на набірника.


1

Додати дозвіл у маніфест:

<uses-permission android:name="android.permission.CALL_PHONE" />

Зробіть кнопку або будь-який приклад віджета: btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});

ця відповідь правильна, але ця відповідь не відповідає питанню.
місяць
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.