Как сделать телефонный звонок в Android
В этом руководстве мы покажем вам, как сделать телефонный звонок на Android и отслеживать состояние телефонного звонка с помощьюPhoneStateListener
.
P.S This project is developed in Eclipse 3.7, and tested with Android 2.3.3.
1 файлы макетов Android
Файл макета Simpel, для отображения кнопки.
Файл: res / layout / main.xml
2. Деятельность
Используйте фрагмент кода ниже, чтобы позвонить в Android.
Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:0377778888")); startActivity(callIntent);
File : MainActivity.java - При кнопке вызова позвоните на номер 0377778888.
package com.example.android; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button) findViewById(R.id.buttonCall); // add button listener button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:0377778888")); startActivity(callIntent); } }); } }
3 Android Манифест
Чтобы позвонить по телефону, Android требуется разрешениеCALL_PHONE.
Файл: AndroidManifest.xml
4. Пример PhoneStateListener
Хорошо, теперь мы обновляем вышеприведенное действие, чтобы отслеживать состояния телефонных звонков, когда телефонный звонок заканчивается, возвращайтесь к исходному действию (фактически, это просто перезапускает действие). Прочитайте комментарий, это должно быть само за себя.
Note
Запустите его и обратитесь к консоли logcat, чтобы понять, как работаетPhoneStateListener
.
Файл: MainActivity.java
package com.example.android; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { final Context context = this; private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button) findViewById(R.id.buttonCall); // add PhoneStateListener PhoneCallListener phoneListener = new PhoneCallListener(); TelephonyManager telephonyManager = (TelephonyManager) this .getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE); // add button listener button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:0377778888")); startActivity(callIntent); } }); } //monitor phone call activities private class PhoneCallListener extends PhoneStateListener { private boolean isPhoneCalling = false; String LOG_TAG = "LOGGING 123"; @Override public void onCallStateChanged(int state, String incomingNumber) { if (TelephonyManager.CALL_STATE_RINGING == state) { // phone ringing Log.i(LOG_TAG, "RINGING, number: " + incomingNumber); } if (TelephonyManager.CALL_STATE_OFFHOOK == state) { // active Log.i(LOG_TAG, "OFFHOOK"); isPhoneCalling = true; } if (TelephonyManager.CALL_STATE_IDLE == state) { // run when class initial and phone call ended, // need detect flag from CALL_STATE_OFFHOOK Log.i(LOG_TAG, "IDLE"); if (isPhoneCalling) { Log.i(LOG_TAG, "restart app"); // restart app Intent i = getBaseContext().getPackageManager() .getLaunchIntentForPackage( getBaseContext().getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); isPhoneCalling = false; } } } } }
Обновите файл манифеста Android еще раз,PhoneStateListener
требуется разрешениеREAD_PHONE_STATE.
Файл: AndroidManifest.xml
5. Demo
Активность началась, просто нажмите кнопку.
Когда кнопка нажата, позвоните по номеру 0377778888.
Когда телефонный звонок зависает или завершается, перезапустите основное действие.
Скачать исходный код
Скачать -Android-Make-Phone-Call-Example.zip (16 КБ)