آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

دسترسی MODIFY_PHONE_STATE

احمد  8 سال پیش  8 سال پیش
0 0

سلام بچه ها چطوری میتونم برنامه را ادمین کنم من دسترسی 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();
}
}
+1 0
میشه اروری که با اون مواجه میشید رو بزارید ؟ (8 سال پیش)
 برای این سوال 4 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
ChookD1  8 سال پیش
+2 0

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

 
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

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

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

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

 

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

    <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 سال پیش
+3 0

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

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

 

+1 0
آقا دمت گرم درست شد دست گلت درد نکنه (8 سال پیش)

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