1.2.1 案例-IP 拨号器
生活随笔
收集整理的這篇文章主要介紹了
1.2.1 案例-IP 拨号器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.2.1 案例-IP 撥號器
一、需求
什么是IP 撥號服務?我們為什么要用IP 服務?所謂的IP 撥號就是通過接入數據網絡來傳播語音信
息。IP 撥號的目的在于轉接至其他頻道,減少話費等用處。移動17951,聯通17911,打長途時在電話號
碼前加上這個就便宜了,如果你的手機上有這個鍵的話,那么打電話時輸入長途電話號碼后,直接按那個
鍵就撥出去了,它會自動加上IP。通俗的說就是打長途便宜。
例如手機撥打長途電話:
移動撥區號+電話號=0.25/分市話+0.7/分長途=0.95/分;
移動撥17951+區號+電話號=0.25/分市話+0.3/分長途=0.55/分。
圖1-1 IP 播放器原理
了解了IP 撥號的用途之后,接下來,我們通過程序在用戶撥出去的號碼前自動加上一個IP 號碼,為
用戶省錢。
之所以能實現這樣的功能,是因為撥號的時候Android 系統會發送一個有序廣播,該廣播中攜帶了用
戶撥打的號碼,我們通過注冊廣播接收者就可以獲取到該廣播,同時將該廣播中的數據進行修改。從而實
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
4
現了用戶號碼自動加IP 號的功能。
為了能讓用戶自己決定IP 號碼,我們需要一個界面(如圖1-2),讓那個用戶輸入IP 號碼,然后將該
IP 號碼保存到SharedPreferences 中。
圖1-2 IP 撥號器界面
二、布局
圖1-2 所示的布局代碼如下所示。
【文件1-1】activity_main.xml
1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"
5. android:orientation="vertical">
6.
7. <EditText
8. android:id="@+id/et_ip"
9. android:hint="請輸入IP 號碼,默認17951"
10. android:layout_width="match_parent"
11. android:layout_height="wrap_content" />
12. <Button
13. android:onClick="saveIP"
14. android:layout_width="wrap_content"
15. android:layout_height="wrap_content"
16. android:text="保存"
17. />
18.
19. </LinearLayout>
20.
三、代碼
在該案例中總共用到了兩個類一個是MainActivity.java 負責讓用戶輸入IP 號碼,另外一個是自定義的
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
5
廣播接收者IPCallerReceiver 負責監聽用戶的撥打電話事件。
【文件1-2】MainActivity.java
1. package com.itheima.android.ipcaller;
2.
3. import android.os.Bundle;
4. import android.app.Activity;
5. import android.content.SharedPreferences;
6. import android.text.TextUtils;
7. import android.view.View;
8. import android.widget.EditText;
9. import android.widget.Toast;
10. /**
11. * 保存用戶的IP 號碼
12. *
13. * @author wzy 2015-11-18
14. *
15. */
16. public class MainActivity extends Activity {
17.
18. private EditText et_ip;
19. private SharedPreferences sp;
20. @Override
21. protected void onCreate(Bundle savedInstanceState) {
22. super.onCreate(savedInstanceState);
23. setContentView(R.layout.activity_main);
24. //文本編輯控件
25. et_ip = (EditText) findViewById(R.id.et_ip);
26. //獲取sp 對象
27. sp = getSharedPreferences("config", MODE_PRIVATE);
28. }
29. //保存IP 號碼
30. public void saveIP(View view){
31. String ipNum = et_ip.getText().toString().trim();
32. //如果為空則保存默認值
33. if (TextUtils.isEmpty(ipNum)) {
34. sp.edit().putString("ip", "17951").commit();
35. }else {
36. sp.edit().putString("ip", ipNum).commit();
37. }
38. Toast.makeText(this, "IP 號碼保存成功", Toast.LENGTH_SHORT).show();
39. }
40.
41. }
42.
編寫自定義廣播接收者需要自定義一個類然后繼承系統提供的BroadCastReceiver 類,然后覆寫抽象方
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
6
法onReceive。
【文件1-3】IPCallerReceiver.java
1. package com.itheima.android.ipcaller;
2.
3. import android.content.BroadcastReceiver;
4. import android.content.Context;
5. import android.content.Intent;
6. import android.content.SharedPreferences;
7. import android.text.TextUtils;
8. import android.util.Log;
9. /**
10. * 自定義廣播接收者
11. *
12. * @author wzy 2015-11-18
13. *
14. */
15. public class IPCallerReceiver extends BroadcastReceiver {
16.
17. @Override
18. public void onReceive(Context context, Intent intent) {
19. //獲取數據
20. String resultData = getResultData();
21. Log.d("tag", "接收到廣播:"+resultData);
22. //從SharedPreferences 中獲取用戶保存的IP 號碼
23. SharedPreferences sp =
24. context.getSharedPreferences("config", Context.MODE_PRIVATE);
25. String ipNum = sp.getString("ip", "17951");
26. if (!TextUtils.isEmpty(ipNum)) {
27. //修改數據
28. resultData = ipNum+resultData;
29. }
30. //將修改后的數據設置出去
31. setResultData(resultData);
32. }
33.
34. }
四、在清單文件中進行注冊
廣播是Android 四大組件之一,因此需要在AndroidManifest.xml 中進行注冊。同時監聽用戶的撥打電
話行為也屬于侵犯用戶隱私的行為,因此需要添加權限。
1、注冊廣播
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
7
【文件1-4】注冊廣播
1. <receiver android:name="com.itheima.android.ipcaller.IPCallerReceiver">
2. <intent-filter >
3. <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
4. </intent-filter>
5. </receiver>
大家可以發現廣播接收者的注冊也需要通過intent-filter 來監聽特定的廣播,如果是監聽Android 系統
的,那么在action 中就需要配置系統提供的常量。如果監聽自定義發送的廣播,那么就需要配置自定義廣
播設置的action。
2、聲明權限
【文件1-5】添加權限
1. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
一、需求
什么是IP 撥號服務?我們為什么要用IP 服務?所謂的IP 撥號就是通過接入數據網絡來傳播語音信
息。IP 撥號的目的在于轉接至其他頻道,減少話費等用處。移動17951,聯通17911,打長途時在電話號
碼前加上這個就便宜了,如果你的手機上有這個鍵的話,那么打電話時輸入長途電話號碼后,直接按那個
鍵就撥出去了,它會自動加上IP。通俗的說就是打長途便宜。
例如手機撥打長途電話:
移動撥區號+電話號=0.25/分市話+0.7/分長途=0.95/分;
移動撥17951+區號+電話號=0.25/分市話+0.3/分長途=0.55/分。
圖1-1 IP 播放器原理
了解了IP 撥號的用途之后,接下來,我們通過程序在用戶撥出去的號碼前自動加上一個IP 號碼,為
用戶省錢。
之所以能實現這樣的功能,是因為撥號的時候Android 系統會發送一個有序廣播,該廣播中攜帶了用
戶撥打的號碼,我們通過注冊廣播接收者就可以獲取到該廣播,同時將該廣播中的數據進行修改。從而實
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
4
現了用戶號碼自動加IP 號的功能。
為了能讓用戶自己決定IP 號碼,我們需要一個界面(如圖1-2),讓那個用戶輸入IP 號碼,然后將該
IP 號碼保存到SharedPreferences 中。
圖1-2 IP 撥號器界面
二、布局
圖1-2 所示的布局代碼如下所示。
【文件1-1】activity_main.xml
1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2. xmlns:tools="http://schemas.android.com/tools"
3. android:layout_width="match_parent"
4. android:layout_height="match_parent"
5. android:orientation="vertical">
6.
7. <EditText
8. android:id="@+id/et_ip"
9. android:hint="請輸入IP 號碼,默認17951"
10. android:layout_width="match_parent"
11. android:layout_height="wrap_content" />
12. <Button
13. android:onClick="saveIP"
14. android:layout_width="wrap_content"
15. android:layout_height="wrap_content"
16. android:text="保存"
17. />
18.
19. </LinearLayout>
20.
三、代碼
在該案例中總共用到了兩個類一個是MainActivity.java 負責讓用戶輸入IP 號碼,另外一個是自定義的
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
5
廣播接收者IPCallerReceiver 負責監聽用戶的撥打電話事件。
【文件1-2】MainActivity.java
1. package com.itheima.android.ipcaller;
2.
3. import android.os.Bundle;
4. import android.app.Activity;
5. import android.content.SharedPreferences;
6. import android.text.TextUtils;
7. import android.view.View;
8. import android.widget.EditText;
9. import android.widget.Toast;
10. /**
11. * 保存用戶的IP 號碼
12. *
13. * @author wzy 2015-11-18
14. *
15. */
16. public class MainActivity extends Activity {
17.
18. private EditText et_ip;
19. private SharedPreferences sp;
20. @Override
21. protected void onCreate(Bundle savedInstanceState) {
22. super.onCreate(savedInstanceState);
23. setContentView(R.layout.activity_main);
24. //文本編輯控件
25. et_ip = (EditText) findViewById(R.id.et_ip);
26. //獲取sp 對象
27. sp = getSharedPreferences("config", MODE_PRIVATE);
28. }
29. //保存IP 號碼
30. public void saveIP(View view){
31. String ipNum = et_ip.getText().toString().trim();
32. //如果為空則保存默認值
33. if (TextUtils.isEmpty(ipNum)) {
34. sp.edit().putString("ip", "17951").commit();
35. }else {
36. sp.edit().putString("ip", ipNum).commit();
37. }
38. Toast.makeText(this, "IP 號碼保存成功", Toast.LENGTH_SHORT).show();
39. }
40.
41. }
42.
編寫自定義廣播接收者需要自定義一個類然后繼承系統提供的BroadCastReceiver 類,然后覆寫抽象方
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
6
法onReceive。
【文件1-3】IPCallerReceiver.java
1. package com.itheima.android.ipcaller;
2.
3. import android.content.BroadcastReceiver;
4. import android.content.Context;
5. import android.content.Intent;
6. import android.content.SharedPreferences;
7. import android.text.TextUtils;
8. import android.util.Log;
9. /**
10. * 自定義廣播接收者
11. *
12. * @author wzy 2015-11-18
13. *
14. */
15. public class IPCallerReceiver extends BroadcastReceiver {
16.
17. @Override
18. public void onReceive(Context context, Intent intent) {
19. //獲取數據
20. String resultData = getResultData();
21. Log.d("tag", "接收到廣播:"+resultData);
22. //從SharedPreferences 中獲取用戶保存的IP 號碼
23. SharedPreferences sp =
24. context.getSharedPreferences("config", Context.MODE_PRIVATE);
25. String ipNum = sp.getString("ip", "17951");
26. if (!TextUtils.isEmpty(ipNum)) {
27. //修改數據
28. resultData = ipNum+resultData;
29. }
30. //將修改后的數據設置出去
31. setResultData(resultData);
32. }
33.
34. }
四、在清單文件中進行注冊
廣播是Android 四大組件之一,因此需要在AndroidManifest.xml 中進行注冊。同時監聽用戶的撥打電
話行為也屬于侵犯用戶隱私的行為,因此需要添加權限。
1、注冊廣播
上海黑馬程序員——只要學不死,就往死里學,沖擊年薪20 萬!
7
【文件1-4】注冊廣播
1. <receiver android:name="com.itheima.android.ipcaller.IPCallerReceiver">
2. <intent-filter >
3. <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action>
4. </intent-filter>
5. </receiver>
大家可以發現廣播接收者的注冊也需要通過intent-filter 來監聽特定的廣播,如果是監聽Android 系統
的,那么在action 中就需要配置系統提供的常量。如果監聽自定義發送的廣播,那么就需要配置自定義廣
播設置的action。
2、聲明權限
【文件1-5】添加權限
1. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
總結
以上是生活随笔為你收集整理的1.2.1 案例-IP 拨号器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数值分析课程主要学习内容总结
- 下一篇: 微信小程序-001-抽签功能-000-目