Android uygulamalarında arama geçmişini göstermek için uygulamaya içinde textview olan bir layout ekleyelim.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.makkaya.myapplication.MainActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/callHistory" /> </ScrollView> </LinearLayout>
Arama geçmişini göstermek için textview yerine listview veya cardview da kullanılabilir.
Manifest dosyasında aşağıdaki izin alınmalıdır.
<uses-permission android:name="android.permission.READ_CALL_LOG" />
Uygulama Android 6.0 (API 23) ve üzeri ise aynı zamanda Runtime Permission, yani çalışma zamanı izni alınmalıdır.
Bu izinle birlikte arama geçmişini getiren getCallDetails metodunu içeren java dosyası:
package com.makkaya.myapplication; import android.Manifest; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Build; import android.provider.CallLog; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import java.util.Date; public class MainActivity extends AppCompatActivity { TextView callHistory; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); callHistory = (TextView) findViewById(R.id.callHistory); if(isPermissionGranted()){ getCallDetails(); } } public boolean isPermissionGranted() { if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.READ_CALL_LOG) == PackageManager.PERMISSION_GRANTED) { Log.v("TAG","Permission is granted"); return true; } else { Log.v("TAG","Permission is revoked"); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG}, 1); return false; } } else { //permission is automatically granted on sdk<23 upon installation Log.v("TAG","Permission is granted"); return true; } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show(); getCallDetails(); } else { Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show(); } return; } } } private void getCallDetails() { StringBuffer sb = new StringBuffer(); Cursor managedCursor = managedQuery( CallLog.Calls.CONTENT_URI,null, null,null, null); 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( "Call Details :"); 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 = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } sb.append( "\nPhone Number:--- "+phNumber +" \nCall Type:--- "+dir+" \nCall Date:--- "+callDayTime+" \nCall duration in sec :--- "+callDuration ); sb.append("\n----------------------------------"); } managedCursor.close(); callHistory.setText(sb); } }
Uygulamanın ekran görüntüsü: