小说网站 搜小说 无限网 烟雨红尘 小说爱好者 免费小说 免费小说网站

Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》

没睡着觉,起来更篇文章吧哈哈!首先祝贺李宗伟击败我丹,虽然我是支持我丹的,但是他也不容易哈哈,值得尊敬的人!切入正题:这一篇来介绍个自定义广播接收者。

通常我们在外拨电话的时候,一般为使用网络电话。如果电话号码是某种类型的电话,会自动在前面加上ip号。从而节省费用。今天这一篇就模拟ip拨号。这个功能,是通过广播接收者来实现的。自定义广播接收者,“监听”外拨电话时候系统发出的广播(系统对我们注册的广播大喊:“亲爱的,我来了!”),收到信息后,给外拨电话前缀价格ip号码。

先给个activity布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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"
    tools:context=".MainActivity" 
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入ip线路"
        />
	<Button 
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="保存"
	    android:onClick="click"
	    />
</LinearLayout>
EditText用于输入我们要加入的ip号;Button就保存这个号

注册自定义广播(配置文件注册):

        <receiver android:name=".CallReceiver">
            <intent-filter >
                      <!-- 意图过滤器,外拨电话时所带的意图就是这个东东android.intent.action.NEW_OUTGOING_CALL,我们注册,所以我们能收到 ——>
                 <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>


package com.itydl.ipdialer;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class CallReceiver extends BroadcastReceiver {

	//接收到广播时就会调用
	@Override
	public void onReceive(Context context, Intent intent) {
		//添加IP线路
		//在打电话广播中,会携带拨打的电话的号码,通过以下代码获取到
		String number = getResultData();
		
		if(number.startsWith("0")){
			SharedPreferences sp = context.getSharedPreferences("ip", Context.MODE_PRIVATE);
			String ipNumber = sp.getString("ipNumber", "");
			
			//把IP线路号码添加至用户拨打号码的前面
			number = ipNumber + number;
			
			//把新的号码重新放入广播中,此时拨出去的号码前面加上了我们定义的ip号
			setResultData(number);
			
			abortBroadcast();
		}
		
	}

}

上边把广播接收者写了出来,先提取我们保存的ip号,再给号码加入前缀,再把最后的号码给外拨号中显示。

看一下主活动上的代码:

package com.itydl.ipdialer;

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){
    	EditText et = (EditText) findViewById(R.id.et);
    	SharedPreferences sp = getSharedPreferences("ip", MODE_PRIVATE);
    	sp.edit().putString("ipNumber", et.getText().toString()).commit();
    }
    
}

记得有一个权限要加入:   <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

运行看看效果:


再看外拨电话:


posted on 2016-08-20 00:26  王小航  阅读(313)  评论(0编辑  收藏  举报

导航