0
我已經作出了服務類和類中我已經作出了BroadcastReciever主要內容如下:BroadcastReciever檢測兩個電話時,僅由一個呼叫
final BroadcastReceiver receiver = new BroadcastReceiver() {
private ITelephony telephonyService;
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
//Call Rejection
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
telephonyService.silenceRinger();
telephonyService.endCall();
//Checking if number is in contact list
String name=findNameByNumber(phoneNumber);
if(name.equals("Not Found"))
{
//Name Not Found
}
else
{
//name Found
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
findNameByNumber檢查的數量存在於我的聯繫方式清單:
private String findNameByNumber(String incomingNumber) {
String res = "Not Found";
try {
ContentResolver resolver = getApplicationContext().getContentResolver();
Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(incomingNumber));
Cursor c = resolver.query(uri, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
if (c != null) {
if (c.moveToFirst()) {
res = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
}
c.close();
}
} catch (Exception ex) {
Toast.makeText(getApplicationContext(),ex.toString(), Toast.LENGTH_SHORT).show();
}
return res;
}
這是怎麼我的IntentFilter對象,在服務類使用接收器的樣子:
IntentFilter filter = new IntentFilter();
filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED);
registerReceiver(receiver,filter);
但是,當一個呼叫來臨時,它被檢測爲兩個呼叫而不是一個。我該如何解決這個問題?
:只要手機狀態改變,就會調用ACTION_PHONE_STATE_CHANGED。可以有幾個狀態更改,CALL_STATE_RINGING,call_state_idle。也許它從呼叫回到閒置並觸發兩次。 –
那麼我能做些什麼來阻止呢? –
你應該實際上可以在意圖中使用數據。它應該包含有關該事件的信息。 – RobCo