Как сделать телефонный звонок в Android

Как сделать телефонный звонок в 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

Активность началась, просто нажмите кнопку.

android phone call example

Когда кнопка нажата, позвоните по номеру 0377778888.

android phone call example

Когда телефонный звонок зависает или завершается, перезапустите основное действие.

android phone call example

Скачать исходный код

Скачать -Android-Make-Phone-Call-Example.zip (16 КБ)