電話中かどうか知りたい。
通話中の場合は、サービスを開始します(サービス部分は明確です)。どうすればよいですか?
通話に参加している間、サービスに電話する必要があります...これを行う方法がわかりませんか?何か助けは?
放送受信機が必要です...
マニフェストでブロードキャストレシーバーを宣言します...
<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;
}
}
}
TelephonyManager.getCallState()
は次のいずれかを返します
CALL_STATE_IDLE
CALL_STATE_OFFHOOK
CALL_STATE_RINGING
これが要件に合う場合は、Pied Piperのより包括的なソリューションよりもはるかに少ないコードです。
あなたは電話が来ていることを知ることができるだけですが、これを変更することはできません。 :(これを参照してください なぜ2.3バージョンのAndroidはAndroid.permission.MODIFY_PHONE_STATEを使用していませんか?これの解決策は何ですか?