Android从无知到有知——NO.5

         今天整一下利用广播实现ip拨号。

         这一块主要用到的知识是android四大组件之一的broadcast   receiver(广播接收者),那么它接收什么东东呢,就是我们所无谓的一个个的事件,比如有外拨电话,低电量提示,来短信等等。那什么又是ip拨号呢,大家可能有这样的印象,在拨打长途电话的时候号码前边会加上几位数字,这就是所谓的ip号,这样打电话比直接拨打会便宜一些。其实ip拨号的原理很简单,它就是利用前边说的broadcast   receiver监听到我们所拨打的号码,然后把它提取出来,在其前边加上ip号,最后修改成所谓的ip电话号码,ok,直接上代码啦...... 

<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/input" />
<EditText
        android:inputType="phone"
        android:id="@+id/et_ipnumber"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />
<Button
        android:onClick="click"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/sure" />


             这个想必大家都很熟悉了,先建一个设置ip号的小界面,规定其只能输入电话类型的号码,没啥难度,直接上效果图:

            接下里就到了比较关键的步骤了,再来一块:

public class MainActivity extends Activity {
    private EditText et_ipnumber;
    private SharedPreferences sp;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_ipnumber=(EditText)findViewById(R.id.et_ipnumber);
		sp=getSharedPreferences("config", MODE_PRIVATE);
		et_ipnumber.setText(sp.getString("ipnumber", ""));
	}
	@SuppressLint("ShowToast")
	public void click(View view){
		String ipnumber=et_ipnumber.getText().toString().trim();
		Editor editor=sp.edit();
		editor.putString("ipnumber", ipnumber);
		editor.commit();
		Toast.makeText(this,"设置完毕", 0).show();
	}
}


           首先我们通过id找到设置好的ip号,把它赋给ipnumber,得到号码以后我们需要把它存起来,这样下次再进去的时候这个号码还会显示,用到的是SharedPreferences,它是一个轻量级应用程序内部轻量级的存储方案,特别适合用于保存软件配置参数。getSharedPreferences有两个参数,第一个参数是存储时的名称,第二个参数则是文件的打开方式;然后sp调用它的方法的得到一个编辑器editor,将数据保存至SharedPreferences,别忘了用commit()方法提交,拿到这个数据之后就把它返给et_ipnumber的文本中,这样一个基础的ip拨号设置器就完成了。

        布局完成了,接下来就要干活了,去监听外拨电话然后将其修改成ip号码的形式。

        我们需要建一个java类,继承Broadcast   receiver,上代码:

public class OutCall extends BroadcastReceiver {	
	@Override
	public void onReceive(Context context, Intent intent) {
		System.out.println("发现一个外拨电话");
		String number=getResultData();
		System.out.println("这是外拨电话的号码");//得到外拨电话号码
		//替换号码
		SharedPreferences sp =context.getSharedPreferences("config", context.MODE_PRIVATE);
		String ipnumber=sp.getString("ipnumber", "");
		String newnumber=ipnumber+number;
		//得到新的外拨号码
		setResultData(newnumber);
	}      
}


           当有一个外拨电话时它便会调用onReceive方法(关于这个方法和相关知识的补充放到下一篇),我们还可以把监听到的电话号码显示出来,然后将其和设置好的ip号相加得到最终的ip电话号码。上机上效果图吧:

            我给自己打的电话,前边加上了设置好的ip号1234,ok,大体就是这样,下一篇说说这个小例子里边出现的一些问题还有一些必要的附带知识,先这样。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值