2015-06-01 161 views
0

我已經做了一個廣播接收器,並且只要發生撥出電話事件,它就會提取撥出號碼。現在我想將它整合到來電號碼中。我正在分享代碼。如何獲取撥打電話的電話號碼信息

callreceiver類

public class CallReceiver extends BroadcastReceiver { 
    TelephonyManager tManager; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String OutgoingCallNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Log.i("CLApp", OutgoingCallNumber); 
    } 
} 

清單文件

<receiver android:name=".CallReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 

錯誤日誌:

06-01 10:57:36.209: E/dalvikvm(29762): Could not find class 'android.content.RestrictionsManager', referenced from method com.salesforce.androidsdk.config.RuntimeConfig.getRestrictions 
06-01 10:57:36.219: E/dalvikvm(29762): Could not find class 'android.content.RestrictionsManager', referenced from method com.salesforce.androidsdk.config.RuntimeConfig.hasRestrictionsProvider 
06-01 10:57:36.329: E/IMGSRV(29762): :0: PVRDRMOpen: TP3, ret = 49 
06-01 10:57:36.209: E/dalvikvm(29762): Could not find class 'android.content.RestrictionsManager', referenced from method com.salesforce.androidsdk.config.RuntimeConfig.getRestrictions 
06-01 10:57:36.219: E/dalvikvm(29762): Could not find class 'android.content.RestrictionsManager', referenced from method com.salesforce.androidsdk.config.RuntimeConfig.hasRestrictionsProvider 
06-01 10:57:36.329: E/IMGSRV(29762): :0: PVRDRMOpen: TP3, ret = 49 
06-01 10:57:36.329: E/IMGSRV(29762): :0: PVRDRMOpen: TP3, ret = 50 
06-01 10:57:36.329: E/IMGSRV(29762): :0: PVRDRMOpen: TP3, ret = 50 
06-01 10:57:36.329: E/IMGSRV(29762): :0: PVRDRMOpen: TP3, ret = 50 
06-01 10:57:52.709: E/AndroidRuntime(29762): FATAL EXCEPTION: main 
06-01 10:57:52.709: E/AndroidRuntime(29762): Process: io.concret.callloggerapp, PID: 29762 
06-01 10:57:52.709: E/AndroidRuntime(29762): java.lang.RuntimeException: Unable to start receiver io.concret.callloggerapp.CallReceiver: java.lang.NullPointerException: println needs a message 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2593) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.app.ActivityThread.access$1700(ActivityThread.java:139) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.os.Handler.dispatchMessage(Handler.java:102) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.os.Looper.loop(Looper.java:149) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.app.ActivityThread.main(ActivityThread.java:5257) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at java.lang.reflect.Method.invokeNative(Native Method) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at java.lang.reflect.Method.invoke(Method.java:515) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at dalvik.system.NativeStart.main(Native Method) 
06-01 10:57:52.709: E/AndroidRuntime(29762): Caused by: java.lang.NullPointerException: println needs a message 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.util.Log.println_native(Native Method) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.util.Log.println_filter(Log.java:105) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.util.Log.i(Log.java:187) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at io.concret.callloggerapp.CallReceiver.onReceive(CallReceiver.java:23) 
06-01 10:57:52.709: E/AndroidRuntime(29762): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2586) 
06-01 10:57:52.709: E/AndroidRuntime(29762): ... 10 more 

回答

0

檢查收到的目的是爲呼入或呼出呼叫您的接收器類

public class CallReceiver extends BroadcastReceiver { 
TelephonyManager tManager; 

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) { 
     // Outgoing call 
     final String outgoingCallNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     Log.i("CLApp", OutgoingCallNumber); 
    } 
    else { 
     // Incoming call 
     String incomingCallNumber = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     Log.i("CLApp", incomingCallnumber); 
    } 

} 
+0

,應用程式停止之間的日誌,當我做了設備上的測試呼叫我怎麼能檢查出了什麼問題? – Aswin

+0

查看logcat以獲取錯誤消息。 –

+0

它說它的androidruntime錯誤在....... CallReceiver.onReceive(CallReceive.java:27) – Aswin

0

您可以從呼叫記錄本身獲取呼入和呼出信息。 下面的代碼片段會給你打電話了一系列日期

final String SELECT = CallLog.Calls.DATE + ">?" + " AND " 
     + CallLog.Calls.DATE + "<?"; 
Cursor managedCursor = context.getContentResolver().query(
     CallLog.Calls.CONTENT_URI, 
     new String[] { CallLog.Calls.DATE, CallLog.Calls.DURATION, 
      CallLog.Calls.TYPE, CallLog.Calls.NUMBER, 
      CallLog.Calls._ID }, 
     SELECT, 
     new String[] { String.valueOf(afterdate.getTime()), 
      String.valueOf(beforeDate.getTime()) }, 
     CallLog.Calls.DATE + " desc"); 

int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 

while (managedCursor.moveToNext()) { 
    phNumber = managedCursor.getString(number); 
    String callType = managedCursor.getString(type); 
    String callDate = managedCursor.getString(date); 
    Date callDayTime = new Date(Long.valueOf(callDate)); 
    final String callDuration = managedCursor.getString(duration); 
    String dir = null; 
    int callTypeCode = Integer.parseInt(callType); 
    final SmsDetailsPojo dataItem = new SmsDetailsPojo(); 
    String contactName = Util.getContactName(context, phNumber); 

    dataItem.setContactNum(phNumber); 
    dataItem.setContactName(contactName); 
    dataItem.setSmsCount(callDuration); 


    arrContactDetails.add(dataItem); 
} 



e