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

这一块主要用到的知识是android四大组件之中的一个的broadcast   receiver(广播接收者)。那么它接收什么东东呢,就是我们所无谓的一个个的事件,比方有外拨电话,低电量提示。来短信等等。

那什么又是ip拨号呢,大家可能有这种印象,在拨打长途电话的时候号码前边会加上几位数字,这就是所谓的ip号,这样打电话比直接拨打会廉价一些。事实上ip拨号的原理非常easy,它就是利用前边说的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,大体就是这样,下一篇说说这个小样例里边出现的一些问题另一些必要的附带知识,先这样。

Android从无知到有知——NO.5的更多相关文章

  1. Android从无知到有知——NO.7

    的ip拨号器在监听外拨电话时用的是系统提供的广播事件.而有些时候我们须要自己设定广播事件来满足特定的须要. Ok,今天整一下自己定义广播事件,我们用一个状态监測模块向一个3G模块发送报警信息来实现这一 ...

  2. Android从无知到有知——NO.1

    如期而至的软件设计大赛吹响了重生的号角.正如同我们的指导老师所说,这个暑假会影响你近几年的发展,也可能会决定你以后所走的道路. 是的.我身边就有非常好的样例,有些师哥师姐们常常跟我们说.软件大赛不仅使 ...

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

    昨天看了下几种常见的布局,类似于曾经学的html.关于css+div没有接触太多,但这几种布局都比較简单.仅仅要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最经常使用的.前边做的& ...

  4. Android从无知到有知——NO.2

    这几天虽说偶遇瓶颈.但也渐入佳境.因为之前没有接触过android,所以作为一个新手不会给自己过高的要求.相比于去年做的分布式资源检索,今年的移动开发着实要简单一些.尽管其本质没有太大的差别,但从用户 ...

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

    紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=andro ...

  6. Android从无知到有知——NO.4

    因为我们做的是手机安全卫士,因此,我们需要一个地图定位功能,些相关的项目,也有一些教程.到百度官方下载了相关的jar包和API,但自己建项目的时候却不是那么顺利,bug不断,弄得心烦意乱,最后最终臣服 ...

  7. Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载

    一.本文所涉及到的知识点 源码下载 二.目标 通过利用ViewPager+FragmentStatePagerAdapter+TabLayout 实现顶部滑动效果,如图: 三.知识点讲解 1.View ...

  8. Docker学习-从无知到有知的学习过程

    Docker学习 最近被别人提到的docker吸引到了注意力,所以打算先快速的了解一下docker到底是个上面东西. 之所以我写下这个文档呢,是为了记录对docker一无所知我是如何进行学习一门新技术 ...

  9. Android 程序员必须知道的 53 个知识点

    1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...

随机推荐

  1. docker和虚拟化技术的区别

    1.docker和虚拟化技术的区别 Docker 扩展了 Linux 容器(Linux Containers),或着说 LXC,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境.Dock ...

  2. OpenCV学习(3) OpenCV框架

          OpenCV是一个开源的视觉库,其中包括很多计算机视觉的算法实现.在版本2.2以后,OpenCV采用C++特征的API,在1.x版本中,OpenCV函数都是传统的C语言形式.       ...

  3. 微软URLRewriter.dll的url重写的简单使用(实现伪静态)

    先添加引用URLRewriter.dll到项目下的bin目录中,下载: http://files.cnblogs.com/tianguook/URLRewriter.rar 1.在web.config ...

  4. c:forEach实现换行

    Map<String,String> map = new TreeMap<String,String>(); map.put("key1", "v ...

  5. VS2012利用Wix打包问题

    在用VS2012打包的时候,忽然发现没有像VS2010一样可以本地打包的项目模板,于是找了N多资料后,发现现在微软在推荐用WIX打包. 在折腾WIX打包生成界面的时候,遇到了一个很纠结的问题. Unr ...

  6. hihoCoder 1261 String Problem II

    时间限制:50000ms 单点时限:5000ms 内存限制:512MB 描写叙述 我们有一个字符串集合S,当中有N个两两不同的字符串.还有M个询问,每一个询问都会先给出一个字符串w,你须要回答下面三个 ...

  7. 使用Nodejs的Nodemailer通过163信箱发送邮件例程

    首先需要安装一下nodemailer #nmp nodemailer install --save 然后就参照官方文档的例程改写一下就行了,代码如下: 'use strict'; const node ...

  8. C# 实现对微博短网址的重定向还原

    新浪微博中,为了节省输入字数,通过短网址对发布微博中链接进行重定向.我们可以通过代码实现对短网址进行还原,代码如下: private string GetOrignalLink(string link ...

  9. Python 函数返回多值

    返回多值函数可以返回多个值吗?答案是肯定的.比如在游戏中经常需要从一个点移动到另一个点,给出坐标.位移和角度,就可以计算出新的坐标:# math包提供了sin()和 cos()函数,我们先用impor ...

  10. [转发]using的几种用法

    1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到. ...