بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

دسترسی MODIFY_PHONE_STATE

مدیریت گفتگو
احمد 8 سال پیش
آخرین تغییر: 8 سال پیش

سلام بچه ها چطوری میتونم برنامه را ادمین کنم من دسترسی 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();
}
}

نظرات

ChookD1 8 سال پیش
میشه اروری که با اون مواجه میشید رو بزارید ؟

پاسخ‌ها 4

مشاهده پاسخ صحیح
ChookD1 8 سال پیش

اگر شما نیازمند خاتمه دادن به تماس هستید ، علاوه بر کد بالا ، کد زیر رو باید استفاده کنید :

 
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

نظرات

احمد 8 سال پیش
قرار دادم تماس هم دریافت میشه اما خطای security exception میده و میگه تنها برنامه های سیستمی دسترسی به MODIFY_PHONE_STATE دارند و برنامه های عادی دسترسی ندارن
ChookD1 8 سال پیش
توی یکی از لینکهای سایت استک آورفلو دیدم نوشته بود : دسترسی به این متد در اندروید 6 به بالا مقدور شده . و ارجاع داده بود به این لینک لینک همچنین لینک منبعی که دارم از اون منقل میکنم این هست : لینک نمیدونم به کار شما بیاد یا نه .
احمد 8 سال پیش
این دسترسی فقط به برنامه های سیستمی داده میشه مشکل اینه
116236 8 سال پیش

    <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" />

من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.

 

نظرات

ChookD1 8 سال پیش
برنامه ی شما در چه حیطه ای بود ؟
ChookD1 8 سال پیش
هر جا نگاه میکنیم میگه این دسترسی برای نرم افزارهای سیستمی هست و توی اندروید 2.3 به بالا دیگه برای برنامه های دیگه این اجازه رو نمیدن و ...
ChookD1 8 سال پیش
مشکل حل شد ، دستتون درد نکنه
116236 8 سال پیش

    <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" />

من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.

 

نظرات

116236 8 سال پیش

 پاسخ صحیح
     <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" />

من این برنامه رو نوشتم. همین پرمشین ها کفایت می کنه. اگه باز کرش کرد مشکل از جای دگه ای داخل کدهاتونه.

 

نظرات

احمد 8 سال پیش
آقا دمت گرم درست شد دست گلت درد نکنه

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .