Android从无知到有知——NO.5
今天整一下利用广播实现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的更多相关文章
- Android从无知到有知——NO.7
的ip拨号器在监听外拨电话时用的是系统提供的广播事件.而有些时候我们须要自己设定广播事件来满足特定的须要. Ok,今天整一下自己定义广播事件,我们用一个状态监測模块向一个3G模块发送报警信息来实现这一 ...
- Android从无知到有知——NO.1
如期而至的软件设计大赛吹响了重生的号角.正如同我们的指导老师所说,这个暑假会影响你近几年的发展,也可能会决定你以后所走的道路. 是的.我身边就有非常好的样例,有些师哥师姐们常常跟我们说.软件大赛不仅使 ...
- Android从无知到有知——NO.3
昨天看了下几种常见的布局,类似于曾经学的html.关于css+div没有接触太多,但这几种布局都比較简单.仅仅要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最经常使用的.前边做的& ...
- Android从无知到有知——NO.2
这几天虽说偶遇瓶颈.但也渐入佳境.因为之前没有接触过android,所以作为一个新手不会给自己过高的要求.相比于去年做的分布式资源检索,今年的移动开发着实要简单一些.尽管其本质没有太大的差别,但从用户 ...
- Android从无知到有知——NO.6
紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=andro ...
- Android从无知到有知——NO.4
因为我们做的是手机安全卫士,因此,我们需要一个地图定位功能,些相关的项目,也有一些教程.到百度官方下载了相关的jar包和API,但自己建项目的时候却不是那么顺利,bug不断,弄得心烦意乱,最后最终臣服 ...
- Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载
一.本文所涉及到的知识点 源码下载 二.目标 通过利用ViewPager+FragmentStatePagerAdapter+TabLayout 实现顶部滑动效果,如图: 三.知识点讲解 1.View ...
- Docker学习-从无知到有知的学习过程
Docker学习 最近被别人提到的docker吸引到了注意力,所以打算先快速的了解一下docker到底是个上面东西. 之所以我写下这个文档呢,是为了记录对docker一无所知我是如何进行学习一门新技术 ...
- Android 程序员必须知道的 53 个知识点
1. android 单实例运行方法 我们都知道 Android 平台没有任务管理器,而内部 App 维护者一个 Activity history stack 来实现窗口显示和销毁,对于常规从快捷方式 ...
随机推荐
- python的with和__enter__ 、 __exit__
__enter__(): 在使用with语句时调用,会话管理器在代码块开始前调用,返回值与as后的参数绑定 __exit__(): 会话管理器在代码块执行完成好后调用,在with语句完成时,对象销 ...
- cocos2d-x:将iOS项目编译成Andriod项目
来源:http://www.cnblogs.com/angzn/p/3328049.html 一.Android 环境搭建 1.安装Andriod-NDK(Native Development Kit ...
- ThreadLocal实现session中用户信息 的线程间共享
转载自:http://blog.sina.com.cn/s/blog_4b5bc01101013gok.html ThreadLocal并不难理解,我总结的最简单的理解就是: ThreadLocal像 ...
- iOS:UIPageViewController翻页控制器控件详细介绍
翻页控制器控件:UIPageViewController 介绍: 1.它是为我们提供了一种类似翻书效果的一种控件.我们可以通过使用UIPageViewController控件,来完成类似图书一样的翻页 ...
- hdu 1007 Quoit Design(分治法求最近点对)
大致题意:给N个点,求最近点对的距离 d :输出:r = d/2. // Time 2093 ms; Memory 1812 K #include<iostream> #include&l ...
- Thinkphp学习笔记-模板赋值
如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值. $this->assign('name',$va ...
- RHEL7.0 配置网络IP的三种方法
导读 RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编 ...
- Cognos开发ContentManagerServiceStub不能转换为Stub
Cognos SDK开发过程中遇到的小错误详细请看下图 另:附加了详细的错误信息 Exception in thread "main" java.lang.ClassCastExc ...
- ASP.NET缺少程序集引用怎么办
如下所示,提示缺少Windows的引用,在using System.Windows.Forms;有一个下划线 错误代码为: 错误 1 命名空间"System"中不存在类 ...
- LoadRunner录制:事务
背景 LoadRunner 会对事务的性能指标进行记录. 添加事务也是为了在测试的时候统计这段脚本运行时用的时间等等,方便定位性能瓶颈. 一个事务可以包含一个请求,也可以包含多个请求.一般把完成一件事 ...