版权声明:本文为博主原创文章,未经博主允许不得转载。
首先新建AIDL文件,ITelephony.aidl。注意包名为com.android.internal.telephony,不可更改,此时需要重新rebuild project才能正常使用。


总体效果图:如下

废话不多说,咱还是直接上代码吧:
首先布局文件:activity_phonestate

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_phonestate"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center">        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="黑名单"            android:textColor="#0e0e0e"            android:textSize="25dp" />    LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center_vertical">        <EditText            android:id="@+id/et_phone_et"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="3"            android:ems="10"            android:hint="请输入黑名单号码"            android:inputType="phone">            <requestFocus />        EditText>        <Button            android:id="@+id/bt_contact"            android:layout_width="wrap_content"            android:layout_height="40dp"            android:layout_weight="1"            android:onClick="getTelClick"            android:text="选择联系人" />    LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_gravity="center_horizontal">        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginRight="30sp"            android:onClick="yes"            android:text="设置黑名单" />        <Button            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:onClick="no"            android:text="取消黑名单" />    LinearLayout>LinearLayout>

2.Myphone

package com.zking.suzhen_android_phone;import com.android.internal.telephony.ITelephony;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.RemoteException;import android.telephony.TelephonyManager;import android.widget.Toast;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * Created by Administrator on 2017/2/13. */public class Myphone extends BroadcastReceiver {    private TelephonyManager telephonyManager;    @Override    public void onReceive(Context context, Intent intent) {        if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) {            String number = intent.getStringExtra("incoming_number");            Toast.makeText(context, "收到电话,号码是:" + number, Toast.LENGTH_SHORT).show();//获取电话状态,电话管理者            telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);            int str = telephonyManager.getCallState();            switch (str) {                case TelephonyManager.CALL_STATE_RINGING:                    Toast.makeText(context, "未接听", Toast.LENGTH_SHORT).show();//得到电话管理者类对象                    Class clazz = TelephonyManager.class;//得到方法                    try {                        Method method = clazz.getDeclaredMethod("getITelephony", null);                        //设置可访问                        method.setAccessible(true);                        //执行方法                        ITelephony iTelephony = (ITelephony) method.invoke(telephonyManager, null);                        //判断                        //得到号码                        String n = PhoneUtil.getString(context, "number", "").trim();                        if (n.equals(number)) {                            iTelephony.endCall();                        }                    } catch (NoSuchMethodException e) {                        e.printStackTrace();                    } catch (InvocationTargetException e) {                        e.printStackTrace();                    } catch (IllegalAccessException e) {                        e.printStackTrace();                    } catch (RemoteException e) {                        e.printStackTrace();                    }                    break;                case TelephonyManager.CALL_STATE_OFFHOOK:                    Toast.makeText(context, "通话中", Toast.LENGTH_SHORT).show();                    break;                case TelephonyManager.CALL_STATE_IDLE:                    Toast.makeText(context, "已挂断", Toast.LENGTH_SHORT).show();                    break;            }        }    }}

3.PhoneAction

package com.zking.suzhen_android_phone;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.provider.ContactsContract;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class PhoneActivity extends AppCompatActivity {    private EditText et_phone;    private Button contact;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_phone);        et_phone = (EditText) findViewById(R.id.et_phone_et);        String number = PhoneUtil.getString(PhoneActivity.this, "number", "");        et_phone.setText(number);        contact = (Button) findViewById(R.id.bt_contact);//获取联系人        contact.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);                PhoneActivity.this.startActivityForResult(intent, 1);            }        });    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            case 1:                if (resultCode == RESULT_OK) {                    Uri contactData = data.getData();                    Cursor cursor = managedQuery(contactData, null, null, null,                            null);                    cursor.moveToFirst();                    String nums = this.getContactPhone(cursor);                    Log.i("test", "所选手机号为:" + nums);                    //将编辑器直接赋值                    et_phone.setText(nums);                }                break;            default:                break;        }    }    private String getContactPhone(Cursor cursor) {        // TODO Auto-generated method stub        int phoneColumn = cursor                .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);        int phoneNum = cursor.getInt(phoneColumn);        String result = "";        if (phoneNum > 0) {            // 获得联系人的ID号            int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);            String contactId = cursor.getString(idColumn);            // 获得联系人电话的cursor            Cursor phone = getContentResolver().query(                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,                    null,                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="                            + contactId, null, null);            if (phone.moveToFirst()) {                for (; !phone.isAfterLast(); phone.moveToNext()) {                    int index = phone                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);                    int typeindex = phone                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);                    int phone_type = phone.getInt(typeindex);                    String phoneNumber = phone.getString(index);                    result = phoneNumber;                }                if (!phone.isClosed()) {                    phone.close();                }            }        }        return result;    }    //黑名单点击事件    public void yes(View view) {//        //得到号码        final String number = et_phone.getText().toString();        AlertDialog.Builder builder = new AlertDialog.Builder(PhoneActivity.this);        builder.setTitle("温馨提示");        builder.setMessage("你确定设置" + number + "黑名单吗?");        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                Toast.makeText(PhoneActivity.this, "黑名单设置成功", Toast.LENGTH_SHORT).show();                PhoneUtil.setString(PhoneActivity.this, "number", number);            }        });        builder.setNegativeButton("取消", null);        builder.show();    }    //取消黑名单    public void no(View view) {        String number = PhoneUtil.getString(PhoneActivity.this, "number", "");        if (!"".equals(number)) {            PhoneUtil.setString(PhoneActivity.this, "number", "");            Toast.makeText(this, "取消成功", Toast.LENGTH_SHORT).show();        }    }}

4.配置清单文件,权限

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.zking.suzhen_android_phone">        <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.CALL_PHONE" />    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">        activity>                <receiver android:name=".Myphone">            <intent-filter>                <action android:name="android.intent.action.PHONE_STATE" />            intent-filter>        receiver>        <activity android:name=".PhoneActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            intent-filter>        activity>    application>manifest>

以上就是我的经验和总结,欢迎大家留言讨论,不懂得可以评论留言!

更多相关文章

  1. android-实现黑名单拦截
  2. Android(安卓)MediaRecoder实现电话录音,其中出现录制成功但没有
  3. Android读取联系人信息(姓名,电话,地址,邮箱,生日等)
  4. android GSM incoming电话部分流程
  5. 使用AlertDialog实现使用在android中弹出对话框,询问用户是否继续
  6. android 自定义接听电话时报错:java.lang.SecurityException: Nei
  7. Android打电话过程
  8. contentprovider--读取写入联系人数据
  9. Android(安卓)使用 Timer 做倒计时。实现开始 (start),取消 (canc

随机推荐

  1. Android LineaerLayout中layout_margin失
  2. 组件属性
  3. Android 15本经典教程和150多个实例源码
  4. android EditText提示居右无法显示的问题
  5. Android有效解决加载大图片时内存溢出的
  6. RelativeLayout里常用的位置属性
  7. ArcGIS for Android 离线数据编辑原理
  8. android 多媒体数据库详解
  9. android中自定义RadioButton
  10. 控件的间距为0