web-dev-qa-db-ja.com

Androidで通話中かどうかを知る方法は?

電話中かどうか知りたい。

通話中の場合は、サービスを開始します(サービス部分は明確です)。どうすればよいですか?

通話に参加している間、サービスに電話する必要があります...これを行う方法がわかりませんか?何か助けは?

32
Rockin

放送受信機が必要です...

マニフェストでブロードキャストレシーバーを宣言します...

<receiver Android:name=".PhoneStateBroadcastReceiver">
        <intent-filter>
                <action Android:name="Android.intent.action.PHONE_STATE"/>     
        </intent-filter>
</receiver>

また、uses-permissionを宣言します...

<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />  

放送受信機クラス...

package x.y;

import Android.content.BroadcastReceiver;
import Android.content.Context;
import Android.content.Intent;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;

public class PhoneStateBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        telephonyManager.listen(new CustomPhoneStateListener(context), PhoneStateListener.LISTEN_CALL_STATE);

    }

}

そして、電話状態リスナーをカスタマイズする1つのクラス...

package x.y;
import Android.content.Context;
import Android.telephony.PhoneStateListener;
import Android.telephony.TelephonyManager;

public class CustomPhoneStateListener extends PhoneStateListener {

    //private static final String TAG = "PhoneStateChanged";
    Context context; //Context to make Toast if required 
    public CustomPhoneStateListener(Context context) {
        super();
        this.context = context;
    }

    @Override
    public void onCallStateChanged(int state, String incomingNumber) {
        super.onCallStateChanged(state, incomingNumber);

        switch (state) {
        case TelephonyManager.CALL_STATE_IDLE:
            //when Idle i.e no call
            Toast.makeText(context, "Phone state Idle", Toast.LENGTH_LONG).show();
            break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
            //when Off hook i.e in call
            //Make intent and start your service here
            Toast.makeText(context, "Phone state Off hook", Toast.LENGTH_LONG).show();
            break;
        case TelephonyManager.CALL_STATE_RINGING:
            //when Ringing
            Toast.makeText(context, "Phone state Ringing", Toast.LENGTH_LONG).show();
            break;
        default:
            break;
        }
    }
}
55
Vaibhav Jani

TelephonyManager.getCallState() は次のいずれかを返します

  • CALL_STATE_IDLE
  • CALL_STATE_OFFHOOK
  • CALL_STATE_RINGING

これが要件に合う場合は、Pied Piperのより包括的なソリューションよりもはるかに少ないコードです。

29
Adam

あなたは電話が来ていることを知ることができるだけですが、これを変更することはできません。 :(これを参照してください なぜ2.3バージョンのAndroidはAndroid.permission.MODIFY_PHONE_STATEを使用していませんか?これの解決策は何ですか?

1
Dhrupal