挂断电话的实现(即类似于电话号码黑名单)

在文章的开头先列出以下需要注意的地方:

1、需要用到的权限如下:

 

<uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--用于读取电话的状态-->

    <uses-permission android:name="android.permission.WRITE_CONTACTS"/><!--用于删除来电记录-->

    <uses-permission android:name="android.permission.CALL_PHONE"/><!--用于挂断电话-->


2、挂断电话所需要用到的类、方法、与包

 

类:

Class clazz = Class.forName("android.os.ServiceManager");

 

 

方法:

 

Method method = clazz.getMethod("getService", String.class);


 

包:

所需要用到的包的下载路径为:

下载地址如下:

 

http://download.csdn.net/detail/caihongshijie6/6282451


 

代码如下:

在写代码之前先把所需要用到的包导进来。。

1、MainActivity

 

package com.njupt.endcall1;



import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.Menu;



public class MainActivity extends Activity {



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		

		Intent intent = new Intent(this,PhoneService1.class);

		startService(intent);

	}



	@Override

	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.

		getMenuInflater().inflate(R.menu.main, menu);

		return true;

	}



}


 

2、PhoneService

 

package com.njupt.endcall1;



import java.lang.reflect.Method;



import com.android.internal.telephony.ITelephony;



import android.app.Service;

import android.content.Context;

import android.content.Intent;

import android.database.ContentObserver;

import android.net.Uri;

import android.os.Handler;

import android.os.IBinder;

import android.provider.CallLog.Calls;

import android.telephony.PhoneStateListener;

import android.telephony.TelephonyManager;



public class PhoneService1 extends Service {



	private TelephonyManager tm;

	private MyPhoneStateListener listener;



	@Override

	public void onCreate() {

		super.onCreate();



		tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

		listener = new MyPhoneStateListener();



		tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

	}



	private class MyPhoneStateListener extends PhoneStateListener {

		public MyPhoneStateListener() {

		}



		@Override

		public void onCallStateChanged(int state, String incomingNumber) {

			super.onCallStateChanged(state, incomingNumber);



			switch (state) {

			case TelephonyManager.CALL_STATE_IDLE:



				break;

			case TelephonyManager.CALL_STATE_OFFHOOK:

				break;

			case TelephonyManager.CALL_STATE_RINGING:

				endcall(incomingNumber);

				break;

			default:

				break;

			}

		}

	}



	private void endcall(String incomingNumber) {

		try {

			if (incomingNumber.equals("5560")) {

				Class clazz = Class.forName("android.os.ServiceManager");

				Method method = clazz.getMethod("getService", String.class);

				IBinder ibinder =  (IBinder) method.invoke(null, Context.TELEPHONY_SERVICE);

			    ITelephony iTelephony = ITelephony.Stub.asInterface(ibinder);

			    iTelephony.endCall();

			    

			    getContentResolver().registerContentObserver(Calls.CONTENT_URI,true, new MyContentObserver(new Handler(), incomingNumber));

			    

			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}



	private class MyContentObserver extends ContentObserver{

		private String incomingNumber;

		public MyContentObserver(Handler handler , String incomingNumber) {

			super(handler);

			this.incomingNumber = incomingNumber;

		}

		

		@Override

		public void onChange(boolean selfChange) {

			super.onChange(selfChange);

		    

			Uri uri = Calls.CONTENT_URI;

			getContentResolver().delete(uri," number = ? ", new String[]{incomingNumber});

		    getContentResolver().unregisterContentObserver(this);

		}

	}

	@Override

	public IBinder onBind(Intent intent) {

		// TODO Auto-generated method stub

		return null;

	}



}


 

3、AndroidManifest.xml

 

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>

    <uses-permission android:name="android.permission.CALL_PHONE"/>

 

<service android:name="com.njupt.endcall1.PhoneService1"/>


 



 

你可能感兴趣的:(实现)