آموزش رد تماس (reject) تماس های ورودی در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش رد تماس (reject) تماس های ورودی در اندروید خواهیم پرداخت در این آموزش بررسی می شود که شماره ای با شما تماس گرفته است در لیست مخاطبان شما هست یا خیر و در صورت نبودن تماس reject می شود در ادامه با ما همراه باشید.
ابتدای کار وارد فایل AndroidManifest.xml شده و دسترسی های زیر را اضافه کنید.
1 2 3 | <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS"/> |
یک فایل جاوا به نام IncomingCallReceiver.java ایجاد کرده و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package ir.programchi; import java.lang.reflect.Method; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.media.AudioManager; import android.provider.ContactsContract; import android.telephony.TelephonyManager; public class IncomingCallReceiver extends BroadcastReceiver{ String incomingNumber=""; AudioManager audioManager; TelephonyManager telephonyManager; public void onReceive(Context context, Intent intent) { audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (intent.getAction().equals("android.intent.action.PHONE_STATE")) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); } } if(!incomingNumber.equals("")){ ContentResolver cr=context.getContentResolver(); Cursor numbers=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID,ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.CommonDataKinds.Phone.NUMBER +"=?", new String[]{incomingNumber}, null); if(numbers.getCount()<=0){ audioManager.setStreamMute(AudioManager.STREAM_RING, true); rejectCall(); startApp(context,incomingNumber); } } } private void startApp(Context context, String number){ Intent intent=new Intent(context,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("number", "Rejected incoming number:"+number); context.startActivity(intent); } private void rejectCall(){ try { Class<?> classTelephony = Class.forName(telephonyManager.getClass().getName()); Method method = classTelephony.getDeclaredMethod("getITelephony"); method.setAccessible(true); Object telephonyInterface = method.invoke(telephonyManager); Class<?> telephonyInterfaceClass =Class.forName(telephonyInterface.getClass().getName()); Method methodEndCall = telephonyInterfaceClass.getDeclaredMethod("endCall"); methodEndCall.invoke(telephonyInterface); } catch (Exception e) { e.printStackTrace(); } } } |
بالاتر کار این کلاس را گفتم ولی یکبار دیگر به آن اشاره خواهم کرد این کلاس بررسی می کند که شماره ای که با شما تماس گرفته است در لیست مخاطبین شما وجود دارد یا خیر در صورتی که نباشد این رسیور تماس را reject می کند.
حالا در بخش activity_main.xml کد های زیر را قرار دهید .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <TextView android:id="@+id/txtmessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FF1111" android:textSize="20sp" android:layout_centerInParent="true" /> </RelativeLayout> |
و کد مربوط به MainActivity.java همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package ir.programchi; import android.support.v7.app.ActionBarActivity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent=getIntent(); Bundle b=intent.getExtras(); TextView tv=(TextView)findViewById(R.id.txtmessage); if(b!=null){ tv.setText(b.getString("number")); } } } |
و در آخر وارد فایل AndroidManifest.xml شده و همانند زیر ریسور را تعریف کنید.
1 2 3 4 5 | <receiver android:name=".IncommingCallReceiver"> <intent-filter android:priority="999"> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> |
برنامه را اجرا کنید و با یک شماره ناشناس به گوشی زنگ بزنید خواهید دید برنامه تماس را reject کرده و وارد اکتیویتی شده و عکسی همانند زیر برای شما نمایش داده می شود.
این آموزش هم به پایان رسید.
موفق و موید باشید.
کار نمی کنه برنامه
کلاس TelephonyManager رو کجا تعرف کرده اید؟
این رو جایگزین کنید درست میشه