28 Stimmen

Wie implementiert man einen ContentObserver für Anrufprotokolle?

Ich würde gerne wissen, ob es eine Möglichkeit gibt, festzustellen, ob sich der Inhaltsanbieter von Aufrufen geändert hat. Ich meine, wenn ich einen Anruf tätige oder einen Anruf beantworte, wird ein "Flag" zurückgegeben, dass ein neues Protokoll zum Anrufprotokoll hinzugefügt wurde, oder der Ort, an dem Android Informationen über Anrufe speichert.

Denn wenn ich einen Anruf tätige, speichert Android die Nummer, den Namen des Kontakts (falls vorhanden), die Stunde des Anrufs, die Dauer, ..., alles im Inhaltsanbieter. Gibt es also eine Möglichkeit, diese "Flagge" zu erfassen, die sagt, dass der Content-Provider von Anrufen größer ist, ich meine, dass eine neue Daten auf den Content-Provider CallLog.Calls eingefügt wurde.

Ich habe also immer noch viele Zweifel in Bezug auf dieses Thema. Ich weiß nicht, wo ich den Inhaltsbeobachter registrieren soll. Meine Absicht ist, wenn sich etwas im CallLog-Inhaltsanbieter ändert, wird die Insert-Methode des Codes verwendet.

Ich meine, der Code tut nichts, solange keine neuen Daten zum CallLog Content Provider hinzugefügt wurden. Wenn dem CallLog-Inhaltsanbieter Daten hinzugefügt wurden, wird der Code die neuen Daten abfragen und dann einfügen. Ich möchte dies tun, weil die Anwendung ohne einen Content Observer jedes Mal, wenn ich die Anwendung ausführe, Daten in die Datenbank einfügt, die bereits eingefügt wurden, verstanden?

Hier ist also mein Code. Wenn mir jemand sagen könnte, wo ich registerContentObserver() und alles andere, was benötigt wird.

public class RatedCalls extends ListActivity {

    private SQLiteDatabase db;
    private CallDataHelper dh = null;
    StringBuilder sb = new StringBuilder();
    OpenHelper openHelper = new OpenHelper(RatedCalls.this);

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Cursor cursor = getContentResolver().query(
                android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
                android.provider.CallLog.Calls.DATE + " DESC ");

        dh = new CallDataHelper(this);
        db = openHelper.getWritableDatabase();

        startManagingCursor(cursor);
        int numberColumnId = cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
        int durationId = cursor.getColumnIndex(android.provider.CallLog.Calls.DURATION);
        int contactNameId = cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME);
        int dateId = cursor.getColumnIndex(android.provider.CallLog.Calls.DATE);
        int numTypeId = cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NUMBER_TYPE);

        Date dt = new Date();
        int hours = dt.getHours();
        int minutes = dt.getMinutes();
        int seconds = dt.getSeconds();
        String currTime = hours + ":" + minutes + ":" + seconds;

        ArrayList<String> callList = new ArrayList<String>();
        if (cursor.moveToFirst()) {
            do {
                String contactNumber = cursor.getString(numberColumnId);
                String contactName = cursor.getString(contactNameId);
                String duration = cursor.getString(durationId);
                String callDate = DateFormat.getDateInstance().format(dateId);
                String numType = cursor.getString(numTypeId);

                ContentValues values = new ContentValues();
                values.put("contact_id", 1);
                values.put("contact_name", contactName);
                values.put("number_type", numType);
                values.put("contact_number", contactNumber);
                values.put("duration", duration);
                values.put("date", callDate);
                values.put("current_time", currTime);
                values.put("cont", 1);

                this.db.insert(CallDataHelper.TABLE_NAME, null, values);

                Toast.makeText(getBaseContext(), "Inserted!", Toast.LENGTH_LONG);
                callList.add("Contact Number: " + contactNumber
                        + "\nContact Name: " + contactName + "\nDuration: "
                        + duration + "\nDate: " + callDate);

            } while (cursor.moveToNext());
        }
        setListAdapter(new ArrayAdapter<String>(this, R.layout.listitem, callList));

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);
        lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X