思路:
对来电进行监控
1)对于通讯录的电话来电不做监控
2)对于通讯录里没有的电话号码进行监控
监控规则:
1)正则匹配 如:杭州的本地号码需要接听 其他地区来电拒接
2)如果一些确认需要来电的号码但又不想加入黑名单的号码 加入白名单管理列表;
3)如果是手机来电,拒接的发送一条短信(询问是何人找我干什么事情?避免误伤),如果是座机就误伤吧!
android 官方教程http://developer.android.com/training/basics/firstapp/building-ui.html
https://gist.github.com/CyanogenMod/android_frameworks_base/tree/cf4550c3198d6b3d92cdc52707fe70d7cc0caa9f
—————————————分隔线——————————
下面是收集的一些代码片段:
public class PhoneStatReceiver extends BroadcastReceiver{
private static final String TAG = "PhoneStatReceiver";
// private static MyPhoneStateListener phoneListener = new MyPhoneStateListener();
private static boolean incomingFlag = false;
private static String incoming_number = null;
@Override
public void onReceive(Context context, Intent intent) {
//如果是拨打电话
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
incomingFlag = false;
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.i(TAG, "call OUT:"+phoneNumber);
}else{ //action.equals(MyBroadcastReceiver.B_PHONE_STATE)
//如果是来电
TelephonyManager tm =
(TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
switch (tm.getCallState()) {
case TelephonyManager.CALL_STATE_RINGING:
incomingFlag = true;//标识当前是来电
incoming_number = intent.getStringExtra("incoming_number");
if (isBlock(incoming_number)) {
try {
Method method = Class.forName(
"android.os.ServiceManager").getMethod(
"getService", String.class);
// 获取远程TELEPHONY_SERVICE的IBinder对象的代理
IBinder binder = (IBinder) method.invoke(null,
new Object[] { TELEPHONY_SERVICE });
// 将IBinder对象的代理转换为ITelephony对象
ITelephony telephony = ITelephony.Stub
.asInterface(binder);
// 挂断电话
telephony.endCall();
} catch (Exception e) {
e.printStackTrace();
}
}
Log.i(TAG, "RINGING :"+ incoming_number);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if(incomingFlag){
Log.i(TAG, "incoming ACCEPT :"+ incoming_number);
}
break;
case TelephonyManager.CALL_STATE_IDLE:
if(incomingFlag){
Log.i(TAG, "incoming IDLE");
}
break;
}
}
}
}
在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction,
另外注意加上相应的权限。
<receiver android:name=".filter.PhoneStatReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
来电分三种状态:
CALL_STATE_RINGING:来电响铃
CALL_STATE_OFFHOOK:摘机
CALL_STATE_IDLE:挂机
http://blog.csdn.net/lee576/article/details/8053387
http://wenku.baidu.com/view/f391162e453610661ed9f4b1.html
private static final String[] PHONES_PROJECTION = new String[] {
Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };
/**得到手机通讯录联系人信息**/
private void getPhoneContacts() {
ContentResolver resolver = mContext.getContentResolver();
// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
//得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
//当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;
//得到联系人名称
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
//得到联系人ID
Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);
//得到联系人头像ID
Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
//得到联系人头像Bitamp
Bitmap contactPhoto = null;
//photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
if(photoid > 0 ) {
Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
contactPhoto = BitmapFactory.decodeStream(input);
}else {
contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);
}
mContactsName.add(contactName);
mContactsNumber.add(phoneNumber);
mContactsPhonto.add(contactPhoto);
}
phoneCursor.close();
}
}
private Cursor getContacts(){
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
//sort ordering based on localized preferences(sqlite排序用法:根据本地化设置对字符串进行比较排序)
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
分享到:
相关推荐
在Android平台上,知心草稿本是一款专为用户设计的小程序,它提供了便捷的手写输入功能,让用户可以随时随地记录灵感和想法。这款应用的核心特点在于它的草稿保存方式和分享机制,下面将详细阐述这两个方面。 一、...
在Android Studio中,"草稿箱"是针对短信应用或者类似通信应用的一个核心功能模块,它允许用户保存未完成或不准备立即发送的短信作为草稿,以便稍后继续编辑或发送。以下是对这个功能的详细说明: 1. **草稿箱设计...
总结来说,本案例通过SharedPreferences展示了在Android中如何实现一个简单的短信草稿箱功能,强调了数据存储在应用程序中的重要性,并提供了处理轻量级数据存储的一种方法。开发者可以根据自己的需求进行扩展,例如...
本文将深入探讨Android MMS的草稿管理机制。 首先,当用户在ComposeMessageActivity中编辑一条消息,如果在未发送的情况下离开编辑页面,系统会自动将这条消息保存为草稿。这一过程在onStop()方法中触发,如果消息...
在Android开发中,"android shard分享"涉及到的是应用内实现社交分享功能的技术。"shard"在这里可能是"shared"的误拼,指的是共享或分享。ShareSDK是为Android开发者提供的一种便捷的社交分享解决方案,它整合了众多...
在Android应用开发中,草稿箱功能是常见于各种消息应用程序的一个重要特性。它允许用户在不准备立即发送的情况下保存正在编写的短信或邮件,以便稍后继续编辑或发送。然而,有时候可能会遇到一个问题,即当用户删除...
在WordPress CMS(内容管理系统)中,草稿箱功能是一个非常重要的组成部分,它允许用户保存未完成的文章或页面以便后续编辑和发布。这个标题"WordPress,发布到后台草稿箱"和描述提到了如何利用工具或者插件来优化这...
草稿纸实现PC机的草稿纸功能,并帮助您弄漂亮汉字 草稿纸实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸实现在视图区域...
首先剪映会自动储存草稿,导致草稿的历史版本被自动覆盖 比如上次我全选了所有视频轨道 一个Ctrl+X下去,内存不够,剪映崩了再打开一看,轨道全被剪掉了,还粘贴不上 重点是Ctrl+Z无效,草稿也被覆盖 那么如何找回...
在Android平台上,管理和操作手机短信是一项常见的功能,它涉及到用户界面设计、数据处理以及系统权限管理等多个方面。本文将深入探讨如何实现“Android管理手机短信”这一主题,包括显示未读短信、ListView下拉刷新...
草稿纸软件实现PC端草稿纸功能,并帮助用户弄漂亮汉字。 草稿纸软件实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸软件实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸...
功能齐全的android短信平台,实现功能(1)收发短信(2)不同会话列表显示(3)同一会话左右显示(4)添加联系人至收件人(5)通过上下文菜单拨打电话(6)通过menu菜单进入进入草稿箱(7)删除可以全选、反选,单条...
自动生成草稿后,就可以自动剪辑了。 1. 添加一个媒体到轨道顺序 `草稿媒体库` -> `内容媒体库`-> `轨道片段` 2. `add_media_to_track` 会识别媒体类型,加入到对应轨道。 3. 当没有视频轨道时,创建音频轨道会先...
草稿纸2.0版本是一款综合性的电子草稿工具,旨在提供一个数字化的工作空间,让用户可以方便地进行图片处理、自绘图形以及文字编辑。这款软件特别强调对个人汉字的支持,适应了中国用户的需求,使得在电子环境中书写...
在编写长文或者编辑内容时,自动保存草稿的功能显得尤为重要,因为它可以防止由于网络问题、浏览器崩溃或用户意外关闭页面而导致的数据丢失。 在实现Ajax自动保存草稿的过程中,主要涉及以下几个关键知识点: 1. *...
本软件实现PC端草稿纸功能,并帮助用户弄漂亮汉字。 草稿纸软件实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸软件实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸软件...
通常,短信存储在`content://sms/`这个URI下,分为收件箱(inbox)、草稿箱(drafts)、发件箱(sent)和已发送(outbox)四个类别。 ```java ContentResolver contentResolver = getContentResolver(); Uri smsUri...
草稿纸实现PC机的草稿纸功能 草稿纸实现在视图区域加载图片,并能对图片进行基本操作(旋转拉伸) 草稿纸实现在视图区域中自绘各种图形,并对透明线条以及填充色进行支持 草稿纸实现在视图区域的任意地方输入文字,...
实用工具,用Python实现的快速创建剪映草稿轨道,自动生成视频,JianYingProDraft.zip 说明 实现原理 : JianYingPro 项目文件是 json 的形式存储的,只需要创建draft_content.json,draft_mate_info.json 打开软件后...