`
gryphone
  • 浏览: 434948 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

黑名单 自动静音

阅读更多

黑名单 自动静音

 

当呼叫者属于黑名单列表 自动静音

 

 

[代码 步骤]

本着先易后难的原则 先介绍黑名单列表的制作:其会列出所有联系人列表 以CheckBox形式 可以添加/移除 黑名单

1. 定义所需布局:list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView  
	android:id="@+id/list"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<Button  
	android:id="@+id/btnOK"
	android:layout_gravity="right"
	android:text="OK"
    android:layout_width="100dip" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

 

2. 初始化View

public void initial(){
    	initialView();
    }
    
    public void initialView(){
    	lView = (ListView)findViewById(R.id.list);
    	btnOK = (Button)findViewById(R.id.btnOK);
    }

 

3. 定义ContactsAdapter 用于列出使用联系人

public class ContactsAdapter extends BaseAdapter {
    	Activity activity;
    	
    	public ContactsAdapter(Activity a){
    		activity = a;
    	}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return cursor.getCount();
		}

		@Override
		public Object getItem(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return arg0;
		}

		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			// TODO Auto-generated method stub
			CheckBox rb = new CheckBox(activity);
			rb.setText(" "+getNameById(arg0)+"	|"+getNumberById(arg0));
			return rb;
			
		}
    	
    }

 

其中  getNameById() getNumberById() 可以根据position 返回联系人的名字和号码

public String getNameById(int id){
    	cursor.moveToPosition(id);

    	int index = cursor.getColumnIndex(People.NAME);
    	
    	return cursor.getString(index);
    }
    
    public String getNumberById(int id){
    	cursor.moveToPosition(id);

    	int index = cursor.getColumnIndex(People.NUMBER);
    	
    	return cursor.getString(index);
    }


其中 cursor = getContentResolver().query(People.CONTENT_URI, 
                null, null, null, null);

 

 

 3. ContactsAdapter 实例化

adapter = new ContactsAdapter(this);
        lView.setAdapter(adapter);

 

 

4. 当按下btnOK 得到所有黑名单 并返回给前Activity:BlacklistMain

btnOK.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				loadContactsChecked();
			}
        	
        });

 

5. loadContactsChecked 用于获取所有选中联系人列表 并返回之

public void loadContactsChecked(){
    	List<String> list = new ArrayList<String>();
    	
    	for(int i=0;i<lView.getCount();i++){
    		CheckBox rButton = (CheckBox)lView.getChildAt(i);
    		
    		if(rButton.isChecked()){
    			list.add(getNumberById(i));
    		}
    	}
    	
    	sendBack(list);
    }
    
    public void sendBack(List<String> l){
    	Intent intent = new Intent();
    	Bundle bundle = new Bundle();
    	
    	String[] sArray = new String[l.size()];
    	l.toArray(sArray);
    	
    	bundle.putStringArray("phone", sArray);
    	
    	intent.putExtras(bundle);
    	
    	this.setResult(RESULT_OK, intent);
    	this.finish();
    	
    }

 

 

至此 黑名单列表选取 已经完成 下面讲自动静音功能 文件为:BlacklistMain

 

布局:main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<Button
	android:id="@+id/buttonMain"  
	android:singleLine="true"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="黑名单"
    />
<Button
	android:id="@+id/buttonClear"  
	android:singleLine="true"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="清屏"
    />
<Button
	android:id="@+id/buttonList"  
	android:singleLine="true"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="列举"
    />
</LinearLayout>
<TextView
	android:id="@+id/status"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

 

 

1. 与BlacklistManager 即:黑名单列表选取 连接 的代码

 

* 单击buttonMain 跳转至BlacklistManager

findViewById(R.id.buttonMain).setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				sendGo();
			}
        	
        });

 

sendGo() 实现:

public void sendGo(){
    	Intent i = new Intent(BlockMain.this,BlockManager.class);
    	this.startActivityForResult(i, ACTIVITY_CONTACTS_DO_CHECKED);
    }

 

其中 ACTIVITY_CONTACTS_DO_CHECKED 为int 用于标记具体是那个startActivity 之用

public final static int ACTIVITY_CONTACTS_DO_CHECKED = 20;

  

 

 * Activity 返回处理 即:从Intent中取出所有选中联系人列表 并存入List<String> 中

protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {
    	switch(requestCode){
    	case ACTIVITY_CONTACTS_DO_CHECKED:
    		Bundle b = data.getExtras();
    		
    		String[] s = b.getStringArray("phone");
    		
    		blockList.clear();
    		for(String i:s){
    			blockList.add(i);
    		}
    		
    		showBloclist();
    		
    		break;
    	}
    	
    	
    }

 

 

下面主要说下 电话呼叫拦截且静音 代码

 

1. 继承PhoneStateListener 并实现其中的onCallStateChanged() 即:根据不同电话状态做定制化

public class CustomPhoneCallListener extends PhoneStateListener {
    	@Override 
        public void onCallStateChanged(int state, String incomingNumber){

    		switch(state){
    		case TelephonyManager.CALL_STATE_IDLE: 
    			textStatus.append("\n"+"status:CALL_STATE_IDLE");
    			
    			aManager.setRingerMode(AudioManager.
    	                  RINGER_MODE_NORMAL); 
    			break;
    			
    		case TelephonyManager.CALL_STATE_OFFHOOK:
    			textStatus.append("\n"+"status:CALL_STATE_OFFHOOK");
    			break;
    			
    		case TelephonyManager.CALL_STATE_RINGING:
    			textStatus.append("\n"+"status:CALL_STATE_RINGING:"+incomingNumber);
    			
    			showBloclist();
    			
    			if(isBlock(incomingNumber)){
    				aManager.setRingerMode(AudioManager.
      	                  RINGER_MODE_SILENT);
    				showToast("Call-number:"+incomingNumber+"|silent");
    			}
    			else {
    				showToast("Call-number:"+incomingNumber);
    			}
    			
    			break;
    		}
    		
    		super.onCallStateChanged(state, incomingNumber);
    		
    	}
    	
    }

 

其中 isBlock() 用于判断来电号码是否在黑名单中 实现为:

public boolean isBlock(String s){
    	//to load all String stored in List<String> to String[]
    	String[] bArray = new String[blockList.size()];
    	blockList.toArray(bArray);

    	for(String s1:bArray){
    		if(s1.replace("-", "").equals(s)){
    			return true;
    		}
    	}
    	return false;
    }

 

对了 在最后别忘了监听电话状态 即:

public void managerCallListener(){
    	aManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    	tManager = (TelephonyManager)getSystemService(
                TELEPHONY_SERVICE);
    	
    	cpListener = new CustomPhoneCallListener(); 
        
        tManager.listen(cpListener, PhoneStateListener.
            LISTEN_CALL_STATE);
        
    }

 

 

 

3. emulator 运行截图:

 

* 添加黑名单 选取:137 128

 

 

 

* 以号码:137 呼叫该emulator 即:gsm call 137

 

 

最后 BS android ! 不知道什么原因 开始在emulator 老失败 后来发现其不能打/接听电话 一拨出电话 就提示: Not register on network. 没办法 只有重新创建emulator再试

 

至于怎么以指导号码向该emulator打电话 以前的博客有 大家自己找一下吧!

 

done!!!

 

 

 

分享到:
评论
2 楼 gryphone 2010-05-08  
yzhong_sa 写道
楼主  养成把textview的text写到string哈   不符合代码规范  嘻嘻

因为这仅仅为demo 那样写要文件不断切换 比较麻烦 所以这样写 简便点~~~~
1 楼 yzhong_sa 2010-05-08  
楼主  养成把textview的text写到string哈   不符合代码规范  嘻嘻

相关推荐

    android黑名单设置 来电自动静音

    这个"android黑名单设置 来电自动静音"的主题,意味着我们可以通过编程方式实现一个功能,即当某个电话号码被列入黑名单时,其来电将会被自动静音。这涉及到Android的权限管理、电话拦截服务以及音频控制等多个方面...

    Android基于AudioManager、PhoneStateListener实现设置黑名单功能

    这样,当黑名单中的电话打来时,手机会自动变为静音,从而实现了黑名单功能。 在实际应用中,这个简单的例子可能需要进一步完善,比如增加短信拦截功能,或者存储和管理黑名单数据(可能需要数据库支持),以及更...

    Android项目实战--手机卫士17--拦截黑名单以及响一声电话的处理

    在本Android项目实战中,我们将深入探讨如何实现手机卫士的核心功能——拦截黑名单及处理响一声电话的问题。手机卫士是一种常见的应用,旨在提供安全防护,帮助用户管理来电和短信,尤其是那些来自未知或不受欢迎...

    自动静音非活动选项卡「Auto Mute Inactive Tabs」「Smart Mute」-crx插件

    ----------------------------附加功能:静音/取消静音选项卡暂时将个别选项卡静音或取消静音,而无需将每个网站都列入白名单/黑名单访问。静默模式更喜欢以完全静默方式浏览网页?尝试静音模式。静音模式可防止任何...

    通过Url静音选项卡「Mute Tabs By Url」-crx插件

    根据他们的url使用黑名单或白名单自动对标签进行mutes标签,并包括其他一些有用的muting控件。 -使用黑名单或白名单,根据标签页的网址自动将其静音。-恐慌的“全部静音”按钮–暂停扩展名按钮–列表条目可以有多个...

    365手机通讯秘书.zip

    ②短信黑名单(短信黑名单表)(可手动添加黑名单号码,也可通过读取系统联系人信息进行选择,提供"移除"功能) 1.2 来电拦截:(拦截后发出通知) ①来电黑名单(电话黑名单表)(可手动添加黑名单号码,也可通过读取...

    双卡手机来电防火墙参考源码

    源码中可能会包含处理黑名单逻辑的部分,如读取和存储黑名单号码,以及在来电时检查来电号码是否在黑名单内,如果在,则自动挂断或静音处理。这部分涉及到数据库操作(如SQLite)和实时事件监听(BroadcastReceiver...

    android来电拦截

    除了简单的黑白名单机制,还可以设置更复杂的规则,如时间条件(例如,在特定时间段内拦截所有来电)、特定事件触发(例如,当设备处于静音模式时自动拦截所有来电)等。这些策略可以通过用户界面配置,并保存在应用...

    MuteTab-crx插件

    2016年6月更新:Mutetab现在静音,知道标签播放声音,仅包括显示的新功能最近嘈杂的标签,默认情况下静音和黑名单。延期首次于2011年发布,作为提供具有更好的镀Chrome和闪光局限性的浏览器的浏览器的实验。此最新...

    Android个性化服务软件的设计及教学应用.pdf

    首先,文章将手机联系人分为四个类别:系统联系人(通讯簿联系人)、白名单(紧急联系人)、黑名单和陌生人。针对这些不同的类别,应用会采取不同的处理策略。例如,白名单中的联系人在任何情况下都可以正常通信,而...

    MODEM防骚扰工具

    这个工具的主要功能是将特定的电话号码列入黑名单,一旦这些号码尝试拨打用户的电话,MODEM将自动拒接或者静音处理,从而让用户免受骚扰电话的困扰。 在现代通信环境中,电话骚扰已经成为许多人生活中的一个烦恼。...

    电话管理器

    - 黑名单功能:用户可以将不想接听或者骚扰电话的号码添加到黑名单,这样当这些号码来电时,电话管理器会自动拦截,避免不必要的打扰。 - 白名单功能:相反,白名单内的号码则会被视为信任联系人,他们的来电不会...

    你可以试试BETA「M u t e T a b BETA」-crx插件

    *禁用自动静音功能可让您暂时禁用所有上述行为 *通过将鼠标悬停在左上角的“ MuteTab”文本上,可以避免听到一些嘈杂的标签 *实验性的“音乐回避”功能会在您观看视频时为您静音,之后再将其取消静音。 支持语言:...

    ios电话拦截

    例如,用户可以在“设置”&gt;“电话”&gt;“阻止此来电者”中添加特定号码到黑名单,这样来自这些号码的来电和信息都会被自动拦截。 2. **未知来电者筛选**:iOS 13及更高版本引入了“未知来电者静音”功能,当接到不在...

    安桌来电卫士

    1. 黑名单管理:用户可以将特定的手机号码添加到黑名单,一旦这些号码来电,系统会自动拦截,不会有任何提示,有效避免了不必要的干扰。同时,黑名单管理还支持导入导出,方便用户在不同设备间同步。 2. 自定义拦截...

    来电知了源码

    如果号码在黑名单内,应用可能会自动拒接或静音。 8. **性能优化**:为了不影响用户体验,需要对查询速度和内存使用进行优化。例如,使用高效的查询算法,避免不必要的网络请求,以及合理地管理数据同步和更新。 9...

    android通信卫士的开发

    2. 拦截策略:根据用户设置的白名单、黑名单或者通话模式(例如静音、振动、勿扰模式等)来决定是否允许接听或拨打某个电话。 四、UI设计与交互 1. 用户界面应简洁易用,包括设置页面、拦截记录查看、黑白名单管理...

    ShutUp!Tab-crx插件

    使活动标签静音,或自动使黑名单中由URL打开的标签静音。 Позволяетотключатьзвукнаопределенныхвкладкахлибодобавитьдоменилиurlвчерныо...

    wynem:我的不和谐机器人Wynem的网站

    威尼姆·迪科尔·博特Wynem是一款多功能不和谐机器人,具有多种功能,可满足各种目的。... 列入黑名单的成员可以通过使用某些或所有命令而被列入黑名单,这意味着他们将无法使用该服务器中的那些漫游

Global site tag (gtag.js) - Google Analytics