البرمجة

مشكلة إذن MODIFY_PHONE_STATE في تطبيق Android

يبدو أنك تواجه مشكلة عند رفض المكالمات في تطبيقك، حيث تحصل على خطأ يشير إلى عدم وجود إذن android.permission.MODIFY_PHONE_STATE. هذا يعني أن تطبيقك يحتاج إلى إذن لتعديل حالة الهاتف، وهذا الإذن يعتبر حساسًا ويتطلب موافقة المستخدم.

لحل هذه المشكلة، يمكنك إضافة إذن MODIFY_PHONE_STATE إلى ملف AndroidManifest.xml الخاص بتطبيقك. يمكنك القيام بذلك عبر إضافة الكود التالي داخل عنصر :

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

بعد ذلك، يجب عليك التأكد من أن تطبيقك يطلب هذا الإذن في وقت التشغيل عندما يتم تشغيله على نظام تشغيل Android 6.0 (Marshmallow) أو أحدث، وذلك باستخدام طلب الإذنات في وقت التشغيل. يمكنك استخدام الكود التالي لطلب الإذن:

java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.MODIFY_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MODIFY_PHONE_STATE}, PERMISSION_REQUEST_CODE); }

عندما يتم طلب الإذن، سيتم عرض طلب للمستخدم للموافقة عليه أو رفضه. بعد الموافقة، يمكن لتطبيقك استخدام الإذن لرفض المكالمات بدون أن تظهر الأخطاء التي واجهتها.

المزيد من المعلومات

بالطبع، يبدو أن تطبيقك يستخدم بعض الدوال التي تتعامل مع مكالمات الهاتف. في الشيفرة التي قدمتها، يتم استخدام الدالة silenceRinger() و endCall() من واجهة ITelephony لرفض المكالمات الواردة.

واجهة ITelephony هي واجهة داخلية تمكن التطبيقات من التفاعل مع خدمات الهاتف دون الحاجة إلى إذنات عامة. ومع ذلك، تتطلب استخدام هذه الواجهة إذن android.permission.MODIFY_PHONE_STATE الذي تحتاج إلى إضافته في ملف AndroidManifest.xml كما ذكرت سابقًا.

تقوم الدالة silenceRinger() بكتم جرس الهاتف خلال المكالمة الواردة، بينما تقوم الدالة endCall() بإنهاء المكالمة نهائيًا.

من الجدير بالذكر أن استخدام هذه الواجهة والدوال المرتبطة بها يعتبر غير مستحسن في تطبيقات Android الحديثة، حيث أن Google قد قامت بتقييد الوصول إلى الواجهة ITelephony لتقليل فرص الاستخدام المسيء لهذه الوظائف. بدلاً من ذلك، يُفضل استخدام APIات التفاعل مع المكالمات الهاتفية الأخرى التي توفرها Android بطرق أكثر أمانًا وموافقة على استخدام البيانات.

زر الذهاب إلى الأعلى