مشکل در دسترسی به call log در اندروید استودیو
با سلام خدمت همه اساتید و کاربران محترم سایت توسینسو، ضمن آرزوی قبولی طاعات و عبادات شما بزرگواران جهت دسترسی به فایل call log گوشی که همان سابقه تماس گوشیست کد زیر را اجرا می کنم اما با خطل مواجه می شوم ممنون می شوم لطف نموده و راهنمایی نمایید
8 پاسخ
ضمن تشکر از اساتید بزرگوار متاسفانه چند روزیه در گیر موضوع مجوزم اما موفق به رفع این مشکل نشدم ممنون میشم این قسمت رو داخل کد برنامه ام اضافه نمایید تا برای سایر کدها بشه ازش استفاده کرد
package com.example.calllogapp;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.CallLog;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG}, PackageManager.PERMISSION_GRANTED);
if(ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CALL_LOG)
!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CALL_LOG}, 1);
}else {
Toast.makeText(this,"مجوز قبلا دریافت شده است" ,Toast.LENGTH_LONG).show();
}
textView =findViewById(R.id.textView);
}
// @RequiresApi(api = Build.VERSION_CODES.O)
public void buttonCallLog(View view){
textView.setText("Call login starting");
String stringOutput = "";
Uri uriCallLogs = Uri.parse("content://call_log/calls");
Cursor cursorCallLogs = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
cursorCallLogs = getContentResolver().query(uriCallLogs,null,null,null);
}
cursorCallLogs.moveToFirst();
// do {
String stringNumber = cursorCallLogs.getString(cursorCallLogs.getColumnIndex(CallLog.Calls.NUMBER));
String stringName = cursorCallLogs.getString(cursorCallLogs.getColumnIndex(CallLog.Calls.CACHED_NAME));
String stringDuration = cursorCallLogs.getString(cursorCallLogs.getColumnIndex(CallLog.Calls.DURATION));
String stringtype = cursorCallLogs.getString(cursorCallLogs.getColumnIndex(CallLog.Calls.TYPE));
stringOutput = stringOutput + "Number: "+ stringNumber + "\nName" + stringName
+"\nDuration: "+ stringDuration
+"\nType: "+ stringtype
+"\n\n";
// }while (cursorCallLogs.moveToNext());
textView.setText(stringOutput);
}
}
استاد بزرگوار مطالعه نمودم اما متاسفانه به دلیل تازه کار بودن متوجه نشدم
زمانیکه اولین بار برنامه از ما مجوز می خواهد و ما مجوز را می دهیم حتما باید اینکه مجوز داده شده یا خیر را چک کرد؟
سلام به شما دوست عزیز.
با مقاله ای که گفتم می تونید ببینید که دسترسی به مجوز گفته شده دارید یا نه
اگر مجوز داشتید می تونید یک بار managedQuery رو تست کنید.
به ای شکل
Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null);
سلام به شما دوست عزیز.
مجوز ها رو چک کردین که برنامه شما مجوز دسترسی به contact ها رو داره؟ و اگه نداره درخواست مجوز بدین
ممنون از پاسخگویی شما
کد مربوط به مجوزها همین خط 24 برنامست یا اینکه بخش دیگر و یا کد دیگه ای مورد نیازه؟
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALL_LOG}, PackageManager.PERMISSION_GRANTED);
این مطلب را مطالعه کنید
چطور و در کدام قسمت باید چک کرد؟
بله دوست عزیز.
این کد درخواست دریافت مجوز است ولی باید چک کنید که ببینید مجوز دریافت شده است یا خیر.