2

Ich versuche Liste aller Zahl von CALL-LOGS zu erhalten, die NICHT in meinen Kontakten sind,Anrufprotokolle nicht CACHED_NAME bekommen

ich eine issue bin vor, wenn jeder, der in meine Kontakte ist mich ruft.

Cursor „c“ kehrt die Zahl ist, weil "name‚(CACHED_NAME) ist null‘.

Aber wenn ich call-log Anwendung öffnen und dann wieder öffne ich meine application, diese Zahl wird als jetzt nicht zurückgegeben "" name "(CACHED_NAME)" hat einen Wert.

Kann ich aktualisiere Daten in Call-Logs aus meiner Anwendung?

Ich kann einen function bauen, der überprüfen kann, ob in Telefonkontakt Nummer existiert oder nicht.

Aber wie kann ich diese Funktion mit Cursor-Adapter verwenden. Ich habe versucht, diese Funktion in Bindview, aber immer noch leeres Element für diese Nummer erstellt. Ich möchte CusrorAdapter verwenden.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    pview = inflater.inflate(R.layout.fragment_call, container, false); 

    ListView lvCall = (ListView) pview.findViewById(R.id.lvCall); 
    Uri uri = Uri.parse("content://call_log/calls"); 
    ContentResolver cr = getActivity().getContentResolver(); 
    **Cursor c = cr.query(uri, null, "name is null", null, "date DESC");** 
    adapter = new CursorAdapter(getActivity().getBaseContext(), c) { 

     @Override 
     public View newView(Context context, Cursor cursor, ViewGroup parent) { 
      LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      return li.inflate(R.layout.call_list, parent, false); 
     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 

      **if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) { 
       return; 
      }** 
      txt_call_number = (TextView) view.findViewById(R.id.txt_call_number); 
      txt_call_id = (TextView) view.findViewById(R.id.txt_call_id); 

      txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER"))); 
      txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim()); 

     } 

    }; 

    lvCall.setAdapter(adapter); 

    return pview; 
} 

Dank

P. S. Es kann einige technische error oder missing code im obigen Beispielcode sein, wie ich gerade code von meinem application herausforderte.

Antwort

1

Sie können mit Ihrer Anwendung nicht direkt auf das aktualisierte Anrufprotokoll `CACHED_NAME 'zugreifen.

public boolean contactExists(Context context, String number) { 
      /// number is the phone number 
      Uri lookupUri = Uri.withAppendedPath(
     PhoneLookup.CONTENT_FILTER_URI, 
     Uri.encode(number)); 
     String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME }; 
     Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null); 
     try { 
      if (cur.moveToFirst()) { 
       return true; 
      } 
     } finally { 
       if (cur != null) 
       cur.close(); 
     } 
    return false; 
} 

Jetzt können Sie in bindView Funktion einchecken.

 @Override 
     public void bindView(View view, Context context, Cursor cursor) { 

      txt_call_number = (TextView) view.findViewById(R.id.txt_call_number); 
      txt_call_id = (TextView) view.findViewById(R.id.txt_call_id); 
      if (contactExists(cursor.getString(cursor.getColumnIndex("NUMBER")))) { 
       txt_call_number.setVisibility(View.GONE); 
       txt_call_id.setVisibility(View.GONE); 
       view.setVisibility(View.GONE); 
       return; 
      }else{ 
       txt_call_number.setText(cursor.getString(cursor.getColumnIndex("NUMBER"))); 
       txt_call_id.setText(cursor.getString(cursor.getColumnIndex("_ID")).trim()); 
      } 
     } 

Kann dies viel helfen.

Happy Coding ... :-)

+1

Ja. Das wird funktionieren. Aber ich würde gerne etwas anderes machen ... nicht durch Sichtbarkeit. – Maulik