2012-12-14 2 views
2

저는 최근 20 건의 전화를 가져와야하는 Android 애플리케이션에서 작업하고 있습니다.최근에 전화를 건 번호를 얻을 수 없습니다.

여기 내 활동 :

public class Calls extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.calls); 
    TextView dialledCall = (TextView)findViewById(R.id.dialledCall); 
     Cursor managedCursor; 
    try { 

StringBuffer sb = new StringBuffer(); 
      String strOrder = CallLog.Calls.DATE + " DESC"; 
      managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE,null, strOrder + " LIMIT 0, 6"); 
      managedCursor.moveToFirst(); 
      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); 
      sb.append("Dialled Calls :"); 

      while (managedCursor.moveToNext()) { 
      String phNumber = managedCursor.getString(number); 
      String callType = managedCursor.getString(type); 
      String callDate = managedCursor.getString(date); 
      Date callDayTime = new Date(Long.valueOf(callDate)); 
      String callDuration = managedCursor.getString(duration); 
      String dir = null; 
      int dircode = Integer.parseInt(callType); 

      switch(dircode) { 
      case CallLog.Calls.OUTGOING_TYPE: 
      dir = "Dialled"; 
      break; 
      } 

      sb.append("\nPhone Number : "+phNumber +" \nCall Type : "+dir+" \nCall Date : "+callDayTime+" \nCall duration in sec : "+callDuration); 
      sb.append("\n----------------------------------");   
      } 
      sb.append("\n=================================="); 
      sb.append("\n\n"); 
      managedCursor.close(); 
      Toast.makeText(this, "Eureka :)", Toast.LENGTH_SHORT).show(); 

      managedCursor = managedQuery(CallLog.Calls.CONTENT_URI,null, CallLog.Calls.TYPE + " = " + CallLog.Calls.INCOMING_TYPE,null, strOrder + " LIMIT 0, 6"); 
      managedCursor.moveToFirst(); 
      int number1 = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
      int type1 = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
      int date1 = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
      int duration1 = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 
      sb.append("Received Calls :"); 
      while (managedCursor.moveToNext()) { 

      String phNumber1 = managedCursor.getString(number1); 
      String callType1 = managedCursor.getString(type1); 
      String callDate1 = managedCursor.getString(date1); 
      Date callDayTime1 = new Date(Long.valueOf(callDate1)); 
      String callDuration1 = managedCursor.getString(duration1); 
      String dir1 = null; 
      int dircode = Integer.parseInt(callType1); 

      switch(dircode) { 
      case CallLog.Calls.INCOMING_TYPE: 
      dir1 = "Received"; 
      break; 
      } 
      sb.append("\nPhone Number : "+phNumber1 +" \nCall Type : "+dir1+" \nCall Date : "+callDayTime1+" \nCall duration in sec : "+callDuration1); 
      sb.append("\n----------------------------------");   
      } 
      sb.append("\n=================================="); 
      sb.append("\n\n"); 
      managedCursor.close(); 
      Toast.makeText(this, "Eureka :) 1", Toast.LENGTH_SHORT).show(); 
     managedCursor.close(); 
} 


catch (NullPointerException e) { 
       // TODO: handle exception 
       Toast.makeText(this, "Sorry Man :(", Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } 
     } 
     } 

그리고 여기에 대응하는 XML 파일입니다

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 

<Linearlayout android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:orientation="vertical"> 

     <TextView 
      android:id="@+id/dialledCall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="10dp" 
      android:textSize="13dp" /> 

</Linearlayout> 
</ScrollView> 

출력 : 내가 처음 5 개 다이얼 번호를 얻을 수,하지만 수신 통화에 내가 ' 심지어 messages.

내가 뭘 잘못하고 있니?

+0

실제로 전화가 걸려 있는지 확인하십시오. 귀하의 휴대 전화에서 전화 여부. –

+0

나는 편집 된 게시물을 볼 수 있습니다. 이제 어떤 결과를 얻었습니까? –

답변

1

당신이 권한 누락 대부분의 아마 :

int count = 0; 
if (cursor.moveToFirst()) { 
    do { 
    // Read your row here 

    ++count; 
    } while (cursor.moveToNext() && count<20); 
} 
cursor.close(); 

수를 제한하는 것이 더 효율적이 될 것이다 :

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

또는 루프가 정확하지, 대신 루프 이런 종류의 시도를 루프 자체가 아닌 쿼리에서 직접 행의 수 :

managedQuery(CallLog.Calls.CONTENT_URI, null, 
     CallLog.Calls.TYPE + " = " + CallLog.Calls.OUTGOING_TYPE, 
     null, strOrder + " LIMIT 0, 20"); 
+0

적절한 코드로 훌륭하게 대답하지만 들어오는 호출에 대해서도 나에게 조용한 말도 안되는 메시지를 받아 들인다. 내 코드 편집으로 내 questin을 업데이트했고, 내가 공감할 때 어디서 잘못 될지 살펴볼 수 있었다. – user1645434

관련 문제