Android 设置电话号码拦截(黑名单)
2017-02-13 20:12
435 查看
Android 设置电话号码拦截(黑名单)
转载请说明出处
最近在做公司新产品的设计,想到电话号码拦截效果设计加入到项目应该挺不错的。所以我们想将这个设计理念加入到我们的产品中。以下是一个小demo
XML代码:
<?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_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.dzz.android23_ecd.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="黑名单"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:layout_width="0dp" android:layout_height="wrap_content" android:hint="请输入黑名单号码" android:id="@+id/et_main" android:phoneNumber="true" android:layout_weight="6" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="联系人" android:onClick="phone" /> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置为" android:onClick="set" android:layout_gravity="center" /> </LinearLayout>
给联系人和设置按钮加事件
Java代码:
package com.dzz.android23_ecd; import android.app.Activity; import android.app.PendingIntent; import android.content.ContentResolver; 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.telephony.SmsManager; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private EditText et_main; private PendingIntent pendingIntent; private SmsManager smsManager; private String usernumber; private String username; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main = (EditText) findViewById(R.id.et_main); //保存电话号码 String eet= Define.getString(MainActivity.this,"con",""); et_main.setText(eet); pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(), 0); smsManager = SmsManager.getDefault(); } public void phone(View view){ startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { ContentResolver reContentResolverol = getContentResolver(); Uri contactData = data.getData(); @SuppressWarnings("deprecation") Cursor cursor = managedQuery(contactData, null, null, null, null); cursor.moveToFirst(); //联系人名字 username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = reContentResolverol.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); d608 while (phone.moveToNext()) { //联系人号码 usernumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); et_main.setText(usernumber +" ("+ username +")"); } } } public void set(View view) { final String et = et_main.getText().toString(); AlertDialog.Builder dl = new AlertDialog.Builder(MainActivity.this); dl.setTitle("温馨提示"); LayoutInflater inflater = getLayoutInflater(); dl.setMessage("你确定将" + et + "号码设置为黑名单吗?"); dl.setPositiveButton("确定", new DialogInterface.OnClickListener() { private String ee; @Override public void onClick(DialogInterface dialogInterface, int i) { if(et.indexOf("(")<0){ ee=et; }else{ ee = et.substring(0,et.indexOf("(")); } Toast.makeText(MainActivity.this, "设置成功!", Toast.LENGTH_SHORT).show(); Define.setString(MainActivity.this,"con",ee); } }); dl.setNegativeButton("还是算了", null); dl.show(); } }
因为还要获取手机号码
还要新建一个类存手机号码
package com.dzz.android23_ecd; import android.content.Context; import android.content.SharedPreferences; /** * Created by 朝花偏不夕拾 on 2017/2/9. */ public class Define { public static void setString(Context context, String key, String value){ SharedPreferences sharedPreferences=context.getSharedPreferences("con",Context.MODE_PRIVATE); SharedPreferences.Editor editor=sharedPreferences.edit(); editor.putString(key,value); editor.commit(); } public static String getString(Context context, String key, String defValue){ SharedPreferences sharedPreferences = context.getSharedPreferences("con", Context.MODE_PRIVATE); return sharedPreferences.getString(key, defValue); } }
还要在新建一个类
来获取电话状态
package com.dzz.android23_ecd; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.RemoteException; import android.telephony.TelephonyManager; import android.util.Log; import com.android.internal.telephony.ITelephony; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Created by 朝花偏不夕拾 on 2017/2/13. */ public class Myphoone extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("android.intent.action.PHONE_STATE".equals(intent.getAction())){ //得到电话管理者 TelephonyManager telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); //得到电话的状态 int state=telephonyManager.getCallState(); switch (state) { case TelephonyManager.CALL_STATE_RINGING: //得到电话号码 String number=intent.getStringExtra("incoming_number"); Log.i("test","来电了"+number); //得到电话管理者类对象 Class<TelephonyManager> clazz=TelephonyManager.class; //得到方法 Method method= null; try { method = clazz.getDeclaredMethod("getITelephony",null); } catch (NoSuchMethodException e) { e.printStackTrace(); } //允许访问私有的方法 method.setAccessible(true); //执行方法 ITelephony iTelephony= null; try { iTelephony = (ITelephony) method.invoke(telephonyManager,null); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } // /判断是不是这个号码是的话就挂断 //保存电话号码 String de= Define.getString(context,"con","").trim(); if(de.equals(number)){ try { iTelephony.endCall(); } catch (RemoteException e) { e.printStackTrace(); } } break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i("test","通话中...录音中"); break; case TelephonyManager.CALL_STATE_IDLE: Log.i("test","挂了"); break; } } } }
还要在清单文件下配置一下
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dzz.android23_ecd"> <!--读取电话状态的权限--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> <!--读取联系人的权限--> <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><!--读--> <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission><!--写--> <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"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".Myphoone"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"></action> </intent-filter> </receiver> </application> </manifest>
最后还要加载一个AIDL
先把Android 切换成 Project 模式
在项目的main下新建一个文件夹 叫aidl然后把下面这个文件复制进去就好了
去云盘下载下来
http://pan.baidu.com/s/1nuMoD2x
相关文章推荐
- Android项目:手机安全卫士(12)—— 通讯卫士之电话短信黑名单设置与拦截
- Android项目:手机安全卫士(12)—— 通讯卫士之电话短信黑名单设置与拦截
- Android--短信***及黑名单拦截
- android 黑名单的拦截
- 黑名单电话自动拦截【Android】
- android调用ITelephony类,AIDL实现电话,联系人黑名单拦截挂断服务
- Android设置黑名单电话挂断
- Android 2.3.5 设置邮件中电话号码高亮显示
- Android 修改系统源码实现应用安装白名单黑名单拦截功能
- android 黑名单 短信拦截
- android 黑名单中电话拦截
- Android电话设置黑名单,来电自动挂断
- android-实现黑名单拦截
- Android 拦截电话号码
- Android黑名单拦截部分代码
- Android--短信窃听器及黑名单拦截
- Android手机安全软件之设置电话拦截返回音浅析
- 超越系统权限----Android黑名单电话拦截
- Android项目实现黑名单拦截效果
- Android BroadcastReceiver之短信拦截(黑名单)