android.intent.action.PHONE_STATE 변경 이벤트는 Android BroadCastReceiver에서 다음 코드 스 니펫을 사용하여 catch하고 있습니다. 이벤트를 성공적으로 인식하고 들어오는 호출을 처리 할 수 있으며 다음 코드에 따라 수행 할 수도 있습니다.Android BroadCastReceiver and android.intent.action.PHONE_STATE 이벤트
필자가 요구하는 것은 특정 번호로 오는 호출을 식별하고 해당 호출을 코드를 통해 끝내고 해당 들어오는 이벤트에 대한 웹 서비스를 호출하는 것입니다.
여기서이 코드는 통화 수신 및 종료 이벤트에 대해 두 번 실행됩니다.
이 메서드를 두 번 호출하는 것을 중지하고 싶습니다. 두 번째 이벤트에 대한 코드 스 니펫 호출을 중지 할 수 있습니다 (호출 종료). 어느 누구라도이 일에 나를 도울 수 있다면 그것은 위대한 것이 될 것입니다.
if (intent.getAction().equals(
"android.intent.action.PHONE_STATE")) {
Log.i("INFO", "Call Received");
try {
TelephonyManager telephony = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Bundle bundle = intent.getExtras();
Log.i("Calling database", "Creatinng DataHandler Object");
DatabaseHandler db = new DatabaseHandler(context);
String phoneNumber =db.getContact().getPhoneNumber();
Log.i("Retriving : ", "Retriving .."+ db.getContact().getPhoneNumber());
if ((bundle.getString("incoming_number").equals(phoneNumber))) {
Log.i("Test Call", "This is the test call");
@SuppressWarnings("rawtypes")
Class c = Class.forName(telephony.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m
.invoke(telephony);
telephonyService = (ITelephony) m.invoke(telephony);
telephonyService.endCall();
// Call the web service and send log details
ServiceClient sc = new ServiceClient();
sc.serviceCall(context);
} else {
Log.i("Normal Call", "This is not the test call");
}
} catch (Exception e) {
Log.i("Exception Occured", "Exception in call code snipet");
}
}
}
어떤 코드가 두 번 실행됩니까? –
문제를 해결 했습니까 – Dory