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,大体就是这样,下一篇说说这个小样例里边出现的一些问题另一些必要的附带知识,先这样。

时间: 2024-10-10 10:32:16

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

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

上一篇中提到的自定义广播事件是无序发出的,这样所有的广播接受者都可以接收到这个事件,我们还可以使得广播以有序的方式发送出去,这个和前者类似: //如果广播事件是有序发出去的,广播接受者按优先级依次收到 sendOrderedBroadcast(intent, null); //在有序广播中,优先级高的接受者可以终止广播事件 这条语句和前边的无序发送类似,第一个参数是指定的"意图",第二个是需要添加的权限,这里可以先不用管.有序接收的原理就是优先级高的先接收,然后按优先级依次接收,我们需

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

昨天看了下几种常见的布局,类似于以前学的html,关于css+div没有接触太多,但这几种布局都比较简单,只要逻辑没有太大问题就能整出来. 相对布局是我们平时默认的布局,也是最常用的,前边做的"电话拨号器"和"短信发送器"都是用的它.这种布局强调控件之间的相对位置,比如利用id标称谁在谁的下边或者上边,通过空间的位置关系来定制整个UI.假设有两个控件,一个id为tv,另一个id为xc,要想使得xc在tv的下方,便可在xc里用这样一条语句----android:lay

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

如期而至的软件设计大赛吹响了重生的号角,正如同我们的指导老师所说,这个暑假会影响你近几年的发展,也可能会决定你以后所走的道路.是的,我身边就有很好的例子,有些师哥师姐们经常跟我们说,软件大赛不仅使他们学习到了很多专业知识,而且提升了他们的自学能力,而这正是我的软肋.所以,今年这个暑假有很多意义,不仅是为了弥补去年的遗憾,更多的是将自己的自学能力提升一个档次,顺便学点知识,之所以用"顺便"这个词是因为我这个人不能主观地去做某件事,越是看重越收获寥寥,所以就把它看成是一门副业,主业就是前者

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

这几天虽说偶遇瓶颈.但也渐入佳境.因为之前没有接触过android,所以作为一个新手不会给自己过高的要求.相比于去年做的分布式资源检索,今年的移动开发着实要简单一些.尽管其本质没有太大的差别,但从用户体验方面来说更能激发每一位学习者的兴趣,这可能就是android的魅力所在吧... 前天做的"电话拨号器",最后载入到模拟器的时候不知道哪里出了错,系统总是自己主动关闭,恼羞成怒也就没再搭理它.昨天又做了"短信发送器",也遇到了和前者相似的问题,只是最后经过调试算是研制

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

紧随上一篇,说一下创建ip拨号器过程中出现的一些问题. 1)在一開始监听外拨电话的时候会报这样一个警告: Permission Denial: receiving Intent { act=android.intent.action.NEW_OUTGOING_CALL flg=0x10000010 (has extras) } to com.heng.ipdail/.OutCall requires android.permission.PROCESS_OUTGOING_CALLS due to

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

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

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

因为我们做的是手机安全卫士,所以需要一个地图定位功能,昨天在百度谷歌上找了些相关的项目,也有一些教程,到百度官方下载了相关的jar包和API,但自己建项目的时候却不是那么顺利,bug不断,弄得心烦意乱,最后终于臣服,原谅我这个刚出道不久的菜鸟吧.不过有一些错误的确让我长了见识,以前都不知道有这么一回事,通过不断地前进,不断地出错,然后不断地学习,最后继续前进,这是一个良性循环. java.lang.nullpointerexception,这是新手经常遇到的一种异常--空指针异常.当时出现这个错

android精选源码,知乎阅读瀑布流loading弹窗扫描二维码简洁的MVP

Android知乎阅读与网易音乐功能源码 Android用瀑布流展示美女图片源码 一个简洁好看的loading弹窗 QRCode 扫描二维码.扫描条形码.相册获取图片后识别.生... 一个Android 轻量级简单易用的Log组件 android猎豹快切App源码 android金融VIP pad版 android智能图片裁剪框架源码 android移动网页浏览器源码 超级清晰易懂简洁的MVP

android 代码加载 已知文件名 的资源文件

Android开发中如果需要用到某个资源,直接使用R.drawable.**文件即可.但是如果一开始无法知道具体加载哪个资源文件,必须在程序中动态获取ID值并加载.而加载过程是使用文件名来加载的,方式如下: public static String RESOURCE_PATH = "android.resource://packagename/"; 假设存在一个名为content_icon的资源图片 public Uri getIconUri(String drawableName)