首页 > 代码库 > Android从无知到有知——NO.5

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