В моем приложении я вызываю некоторые номера телефонов прогматически. есть ли способ, которым я могу проверить, будет ли звуковой сигнал вызова, и установлено соединение для обеспечения действительности номера телефона и завершения вызова перед тем, как поднять.Проверьте состояние телефона телефона Android
ответ
1) Во-первых, вы должны добавить следующие разрешения в файле манифеста:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
2) Затем вы должны определить вещательного приемника
<receiver android:name=".AnswerCallBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
Затем добавьте следующий код в приемник вещания
public class AnswerCallBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
if(arg1.getAction().equals("android.intent.action.PHONE_STATE")){
String state = arg1.getStringExtra(TelephonyManager.EXTRA_STATE);
if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
Log.d(TAG, "Inside Extra state off hook");
String number = arg1.getStringExtra(TelephonyManager.EXTRA_PHONE_NUMBER);
Log.e(TAG, "outgoing number : " + number);
}
else if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
Log.e(TAG, "Inside EXTRA_STATE_RINGING");
String number = arg1.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
Log.e(TAG, "incoming number : " + number);
}
else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
Log.d(TAG, "Inside EXTRA_STATE_IDLE");
}
}
}
}
Попробую угадать ваш код, потому что вы не дали мне никакого ключа :(
Для того, чтобы получить телефонный звонок заявляет, вы должны добавить слушателя к Telephony Manager.
создать класс слушателя:
// Or just make new PhoneStateListener() and override onCallStateChanged
public class PhoneCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
//A new call arrived and is ringing or waiting. In the latter case, another call is already active
}
if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
//At least one call exists that is dialing, active, or on hold, and no calls are ringing or waiting
}
if (state == TelephonyManager.CALL_STATE_IDLE) {
//No activity
}
}
}
Добавить слушатель:
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
После прослушивания состояния телефонного вызова, вы должны начать телефонный звонок себя так, как, что:
Intent callIntent = new Intent(Intent.ACTION_CALL);
CallInfo callInfo = new CallInfo(PHONE_NUMBER);
callIntent.setData(Uri.parse("tel:" + callInfo.getDialTo()));
//** Check for permision **//
startActivity(callIntent);
Для того, чтобы это произошло правильно, вы должны получить разрешение на выполнение вызова и прослушивание состояний телефонных вызовов, поэтому добавьте следующие разрешения для вашего манифеста. xml:
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />