向Android通话记录添加假通话

问题描述:

我正在使用耳机按钮控制器,并且我想添加一个假/无效呼叫来呼叫记录,以防止手机在拨打耳机按钮两次时拨打最后一个呼叫(双击)在HTC手机。 我尝试这样做:向Android通话记录添加假通话

ContentValues cv = new ContentValues(); 
cv.put(CallLog.Calls.NUMBER, number); 
cv.put(CallLog.Calls.DATE, System.currentTimeMillis()); 
cv.put(CallLog.Calls.DURATION, 0); 
cv.put(CallLog.Calls.TYPE, CallLog.Calls.OUTGOING_TYPE); 
cv.put(CallLog.Calls.NEW, 0); 
cv.put(CallLog.Calls.CACHED_NAME, ""); 
cv.put(CallLog.Calls.CACHED_NUMBER_TYPE, 0); 
cv.put(CallLog.Calls.CACHED_NUMBER_LABEL, ""); 
this.getContentResolver().insert(CallLog.Calls.CONTENT_URI, cv); 

而且程序崩溃(应用程序已停止错误)。 我已经设置清单文件权限:

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/> 
<uses-permission android:name="android.permission.READ_CALL_LOG"/> 

问题出在哪里?

+0

我会考虑允许应用程序写入通话记录是一个巨大的安全漏洞,你不能做到这一点。只是不要按耳机按钮两次。 –

+0

@Lotharyx我正在开发一个耳机按钮控制器,我想通过双击耳机按钮来播放下一个音轨,而不是呼叫我呼叫过的最后一个人。 – Mehrdad

+0

请参阅[此链接](http://*.com/questions/20718617/how-to-detect-headset-button-double-click-in-htc-phones-with-broadcast-receiver)解决方案的双点击问题。 – Mehrdad

/** 
* insert new call log 
*/ 
public static void insertNumber(Activity activity) { 
    ContentValues values = new ContentValues(); 
    values.put(CallLog.Calls.CACHED_NUMBER_TYPE, 0); 
    values.put(CallLog.Calls.TYPE, CallLog.Calls.INCOMING_TYPE); 
    values.put(CallLog.Calls.DATE, System.currentTimeMillis()); 
    values.put(CallLog.Calls.DURATION, 50); 
    values.put(CallLog.Calls.NUMBER, "1234567"); 
    activity.getContentResolver().insert(CallLog.Calls.CONTENT_URI, 
      values); 
} 


<uses-permission android:name="android.permission.READ_CALL_LOG" /> 
<uses-permission android:name="android.permission.WRITE_CALL_LOG" /> 
+0

请解释你的代码 – Gwenc37

,除非你手机Root权限和adb push您的应用程序到系统分区(/system/priv-app