如果想要監聽手機的來電狀態 需要接收手機的電話廣播
首先是靜態註冊
<receiver android:name=".PhoneReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
然後是 添加權限
android.permission.PROCESS_OUTGOING_CALLS
public class PhoneReceiver extends BroadcastReceiver {
String TAG = getClass().getName();
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
//來電 去電判斷
if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
String phoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
} else {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
//設置監聽
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
PhoneStateListener listener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("======掛斷");
Intent broadcastIntent = new Intent("android.intent.action.MY_BROADCAST");
mContext.sendBroadcast(broadcastIntent);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}
};
}