码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2016-08-20 01:37:37      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

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

通常我们在外拨电话的时候,一般为使用网络电话。如果电话号码是某种类型的电话,会自动在前面加上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"/>

运行看看效果:

技术分享


再看外拨电话:

技术分享

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

标签:

原文地址:http://blog.csdn.net/qq_32059827/article/details/52254775

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!