पर इंटरसेप्ट आउटगोइंग कॉल हम प्रसारण रिसीवर में आउटगोइंग कॉल हैंगअप स्थिति को अवरुद्ध करना चाहते हैं। हम android.intent.action.PHONE_STATE
सुन रहे हैं और IDLE
स्थिति पर अधिसूचित हो जाते हैं, जब कॉल समाप्त होता है।हैंगअप
दुर्भाग्यवश, हमें कॉल लॉग सामग्री प्रदाता से कॉल नंबर नहीं मिला है। यह हमेशा अंतिम कॉल देता है। दिलचस्प बात यह है कि आने वाली कॉल इरादे में एक संख्या भेजती है लेकिन आउटगोइंग कॉल के लिए कुछ नहीं।
अगर हम android.intent.action.NEW_OUTGOING_CALL
उपयोग करते हैं, फोन नंबर आशय के माध्यम से आ रहा है जब कॉल शुरू होता है, लेकिन हमें किसी भी प्रसंस्करण करने के लिए के रूप में हम कॉल पूर्ण होने की प्रतीक्षा करना चाहते हैं इस स्तर बहुत जल्दी है है।
public class InterceptOutgoingCall extends BroadcastReceiver {
Boolean isOutGoingCall = true;
private static final String LOG_TAG = "InterceptOutgoingCall";
@Override
public void onReceive(Context context, Intent intent) {
//1. Logging the intent params
String state = null;
StringBuffer buf = new StringBuffer();
if (intent.getAction() != null)
buf.append("Intent action: " + intent.getAction());
if (intent.getCategories() != null) {
Set<String> categories = intent.getCategories();
if (categories != null) {
Iterator<String> it = categories.iterator();
buf.append("; categories: ");
int ctr = 0;
for (; it.hasNext();) {
String category = (String) it.next();
if (ctr != 0)
buf.append("/");
buf.append(category);
++ctr;
}
}
}
if (intent.getData() != null) {
buf.append("; intent data: " + intent.getData().toString());
}
Bundle extras = intent.getExtras();
if (extras != null) {
buf.append("; extras: ");
int ctr = 0;
Set keys = extras.keySet();
for (Iterator it = keys.iterator(); it.hasNext();) {
String key = (String) it.next();
Object value = extras.get(key);
if (ctr != 0)
buf.append("/");
String strvalue = value == null ? "null" : value.toString();
if (key.equals("state"))
state = strvalue;
buf.append(key + "=" + strvalue);
++ctr;
}
Log.i(LOG_TAG, buf.toString());
if ("IDLE".equals(state)) {
Log.i(LOG_TAG, "Number of the other party: "
+ getLastCallLogEntry(context));
}
}
String outgoingCall = CallLog.Calls.getLastOutgoingCall(context);
Log.i(LOG_TAG, "Last call:" + outgoingCall);
}
private String getLastCallLogEntry(Context context) {
String[] projection = new String[] { BaseColumns._ID,
CallLog.Calls.NUMBER, CallLog.Calls.TYPE };
ContentResolver resolver = context.getContentResolver();
Cursor cur = resolver.query(CallLog.Calls.CONTENT_URI, projection,
null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
int numberColumn = cur.getColumnIndex(CallLog.Calls.NUMBER);
int typeColumn = cur.getColumnIndex(CallLog.Calls.TYPE);
if (!cur.moveToNext()) {
cur.close();
return "";
}
String number = cur.getString(numberColumn);
String type = cur.getString(typeColumn);
String dir = null;
try {
int dircode = Integer.parseInt(type);
switch (dircode) {
case CallLog.Calls.OUTGOING_TYPE:
dir = "OUTGOING";
break;
case CallLog.Calls.INCOMING_TYPE:
dir = "INCOMING";
break;
case CallLog.Calls.MISSED_TYPE:
dir = "MISSED";
break;
}
} catch (NumberFormatException ex) {
}
if (dir == null)
dir = "Unknown, code: " + type;
cur.close();
return dir + "," + number;
}
लॉग बिल्ली
* जब कॉल शुरू होता है, NEW_OUTGOING_CALL प्रसारित होता है *
04-27 13:07:16.756: INFO/InterceptOutgoingCall(775): Intent action: android.intent.action.NEW_OUTGOING_CALL; extras: android.phone.extra.ALREADY_CALLED=false/android.intent.extra.PHONE_NUMBER=999222/android.phone.extra.ORIGINAL_URI=tel:999-222
परिणाम डेटा
04-27 13:07:16.876: INFO/InterceptOutgoingCall(775): Result Data:999222
कॉल लॉग्स आखिरी कॉल
04-27 13:07:17.156: INFO/InterceptOutgoingCall(775): Last call:809090
* इसके बाद, PHONE_STATE प्रसारण, एक्स्ट्रा कलाकार में कोई संख्या *
04-27 13:07:19.495: INFO/InterceptOutgoingCall(775): Intent action: android.intent.action.PHONE_STATE; extras: state=OFFHOOK
कोई परिणाम नहीं डाटा है
04-27 13:07:19.636: INFO/InterceptOutgoingCall(775): No result data
कॉल पूरा होने पर, अतिरिक्त में कोई संख्या
04-27 13:08:09.306: INFO/InterceptOutgoingCall(775): Intent action: android.intent.action.PHONE_STATE; extras: state=IDLE
कॉल लॉग अंतिम प्रविष्टि पहले से नंबर
04-27 13:08:09.627: INFO/InterceptOutgoingCall(775): Number of the other party: OUTGOING,809090
04-27 13:08:09.675: INFO/InterceptOutgoingCall(775): No result data
04-27 13:08:10.336: INFO/InterceptOutgoingCall(775): Last call:809090