Я хочу отображать клавиатуру набора номера (телефонный звонок) программно при нажатии кнопки в android. Код доступен для прямого набора номера, но мне нужно только показать клавиатуру набора номера, когда я нажимаю кнопку.
Как программно открыть панель набора номера в Android?
Ответы (7)
Вы можете использовать этот код, если хотите программно открыть номеронабиратель без вставки номера:
Java
Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);
Котлин
val intent = Intent(Intent.ACTION_DIAL)
startActivity(intent)
Если вам нужно открыть номеронабиратель с уже набранным номером, вы можете использовать этот код:
Java
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:123 456789"));
startActivity(intent);
Котлин
val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:123 456789")
startActivity(intent)
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:9999999999"));
startActivity(intent);
Для этого нам не нужно добавлять какие-либо разрешения в AndroidManifest.xml.
Intent intent = new Intent(Intent.ACTION_CALL_BUTTON);
startActivity(intent);
в окне набора номера будет отображаться здесь для получения информации.
Сделайте кнопку или пример любого виджета: button1
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:"+button1.getText().toString().trim()));
startActivity(callIntent);
}
});
Добавить разрешение в манифест:
<uses-permission android:name="android.permission.CALL_PHONE" />
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:" + phoneNumber));
if (ActivityCompat.checkSelfPermission(getActivity(), 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);
Кроме того, вы должны зарегистрировать настраиваемый экран набора, как показано в манифесте:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MyDialerApplication"
android:label="@string/app_name" >
<intent-filter android:priority="100" >
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.DIAL" />
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
Если вы хотите использовать его в неактивном классе, создайте такую функцию:
package bp;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import session.MyApplication;
/**
* Created by Atiar Talukdar on 7/11/2019.
*/
public class Utils {
public static void openDialPad(Activity activity, String phoneNumber) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phoneNumber));
activity.startActivity(intent);
}
}
а затем позвоните из любого места, например:
Utils.openDialPad(getActivity(),data.getContactNo());
or
Utils.openDialPad(this,data.getContactNo());
Это другое, но если вы хотите получить доступ к панели набора номера, щелкнув номер в своем xml, объявите атрибут autolink
android:autoLink="phone"