解决方案 »

  1.   

    如果是我的话,一般在使用cursor之前会判断一下是否可用,还有movetofirst,没看到你错误的log,不知道是不是这一个原因
    if(cursor != null && cursor.moveToFirst())
      

  2.   

    应该不是,我之后有试过把后面的代码删了,只执行这一步:cursor = getContentResolver().query(
    Uri.parse("content://call_log/calls"), projection,
    selection, selectionArgs, sortOrder);然后真机测试的时候还是会直接强退
      

  3.   

    应该不是,我之后有试过把后面的代码删了,只执行这一步:cursor = getContentResolver().query(
    Uri.parse("content://call_log/calls"), projection,
    selection, selectionArgs, sortOrder);然后真机测试的时候还是会直接强退强退你把log贴出来看看
      

  4.   

    也许是你finally里的cursor是空的
    cursor.close();
      

  5.   

    刚百度了下才知道真机也能用eclipse调试= =12-06 14:13:40.861: E/AndroidRuntime(3008): FATAL EXCEPTION: main
    12-06 14:13:40.861: E/AndroidRuntime(3008): java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.CallLogProvider from ProcessRecord{42333630 3008:com.example.ringhelper/u0a52} (pid=3008, uid=10052) requires android.permission.READ_CALL_LOG or android.permission.WRITE_CALL_LOG
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.os.Parcel.readException(Parcel.java:1425)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.os.Parcel.readException(Parcel.java:1379)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2389)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.app.ActivityThread.acquireProvider(ActivityThread.java:4392)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:1759)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1123)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.content.ContentResolver.query(ContentResolver.java:355)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.content.ContentResolver.query(ContentResolver.java:314)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at com.example.ringhelper.MainActivity$1.onClick(MainActivity.java:23)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.view.View.performClick(View.java:4091)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.view.View$PerformClick.run(View.java:17072)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.os.Handler.handleCallback(Handler.java:615)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.os.Handler.dispatchMessage(Handler.java:92)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.os.Looper.loop(Looper.java:153)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at android.app.ActivityThread.main(ActivityThread.java:5000)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at java.lang.reflect.Method.invokeNative(Native Method)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at java.lang.reflect.Method.invoke(Method.java:511)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
    12-06 14:13:40.861: E/AndroidRuntime(3008):  at dalvik.system.NativeStart.main(Native Method)
    看log的意思好像是没给权限?查看通信记录的权限我查了下应该是这个:<uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />Manifest里面写了啊= =
      

  6.   


    额、、要给的权限原来是 <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
     <uses-permission android:name="android.permission.READ_CALL_LOG" />啊,问题解决了、、谢谢大神~