دسترسی MODIFY_PHONE_STATE
سلام بچه ها چطوری میتونم برنامه را ادمین کنم من دسترسی android.permission.MODIFY_PHONE_STATE را لازم دارم برای قطع تماس من کد را از استک برداشتم و گذاشتم اما سرویس تا به تابع قطع تماس میرسه کرش میکنه و میگه تین دسترسی فقط برای برنامه های سیستمی هست
راهی بلدین که من بتونم ازش استفتده کنم
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<receiver android:name=".receiver.PhoneCallReceiver">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
package com.android.internal.telephony;
interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
public class PhoneCallReceiver extends BroadcastReceiver {
private ITelephony telephonyService;
private String blacklistednumber = "+458664455";
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
ITelephony telephonyService = (ITelephony) m.invoke(tm);
Bundle bundle = intent.getExtras();
String phoneNumber = bundle.getString("incoming_number");
Log.e("INCOMING", phoneNumber);
if ((phoneNumber != null) && phoneNumber.equals(blacklistednumber)) {
telephonyService.silenceRinger();
telephonyService.endCall();
Log.e("HANG UP", phoneNumber);
}
} catch (Exception e) {
e.printStackTrace();
}
}
اگر شما نیازمند خاتمه دادن به تماس هستید ، علاوه بر کد بالا ، کد زیر رو باید استفاده کنید :
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.endCall();
برای استفاده ی صحیح از این کد باید پریمیشنهای زیر رو هم به سورست اضاف کنی :
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
منبع : Stackoverflow
لینکهای مفید برای شما : لینک 1 ، لینک 2
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .