مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

مقالات تخصصی برنامه نویسی اندروید

اموزش برنامه نویسی اندروید

  • ۰
  • ۰

در این سری از آموزش برنامه نویسی اندروید به آموزش رد تماس (reject) تماس های ورودی در اندروید خواهیم پرداخت در این آموزش بررسی می شود که شماره ای با شما تماس گرفته است در لیست مخاطبان شما هست یا خیر و در صورت نبودن تماس reject می شود

 

ابتدای کار وارد  فایل AndroidManifest.xml شده و دسترسی های زیر را اضافه کنید.

<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 ایجاد کرده و کدهای زیر را در آن قرار دهید.

IncomingCallReceiver

 

  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 کد های زیر را قرار دهید .

activity_main.xml

 

          <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 همانند زیر می شود.

MainActivity.java

 

 

 

  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"));

        }

 

     }

 

  }

 

 

و در آخر وارد فایل مانفیست شده و همانند زیر ریسور را تعریف کنید.

 

          <receiver android:name=".IncommingCallReceiver">

     <intent-filter android:priority="999">

        <action android:name="android.intent.action.PHONE_STATE" />

     </intent-filter>

</receiver>

 

  • ۹۹/۰۳/۱۲
  • vahid hasani

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی