標籤:
沒睡著覺,起來更篇文章吧哈哈!首先祝賀李宗偉擊敗我丹,雖然我是支援我丹的,但是他也不容易哈哈,值得尊敬的人!切入正題:這一篇來介紹個自訂廣播接收者。
通常我們在撥出電話的時候,一般為使用網路電話。如果電話號碼是某種類型的電話,會自動在前面加上ip號。從而節省費用。今天這一篇就類比ip撥號。這個功能,是通過廣播接收者來實現的。自訂廣播接收者,“監聽”撥出電話時候系統發出的廣播(系統對我們註冊的廣播大喊:“親愛的,我來了!”),收到資訊後,給撥出電話首碼價格ip號碼。
先給個activity布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:orientation="vertical" > <EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入ip線路" /><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="儲存" android:onClick="click" /></LinearLayout>
EditText用於輸入我們要加入的ip號;Button就儲存這個號
註冊自訂廣播(設定檔註冊):
<receiver android:name=".CallReceiver"> <intent-filter > <!-- 意圖過濾器,撥出電話時所帶的意圖就是這個東東android.intent.action.NEW_OUTGOING_CALL,我們註冊,所以我們能收到 ——> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver>
package com.itydl.ipdialer;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;public class CallReceiver extends BroadcastReceiver {//接收到廣播時就會調用@Overridepublic void onReceive(Context context, Intent intent) {//添加IP線路//在打電話廣播中,會攜帶撥打的電話的號碼,通過以下代碼擷取到String number = getResultData();if(number.startsWith("0")){SharedPreferences sp = context.getSharedPreferences("ip", Context.MODE_PRIVATE);String ipNumber = sp.getString("ipNumber", "");//把IP線路號碼添加至使用者撥打號碼的前面number = ipNumber + number;//把新的號碼重新放入廣播中,此時撥出去的號碼前面加上了我們定義的ip號setResultData(number);abortBroadcast();}}}
上邊把廣播接收者寫了出來,先提取我們儲存的ip號,再給號碼加入首碼,再把最後的號碼給撥出號中顯示。
看一下主活動上的代碼:
package com.itydl.ipdialer;import android.os.Bundle;import android.app.Activity;import android.content.SharedPreferences;import android.view.Menu;import android.view.View;import android.widget.EditText;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ EditText et = (EditText) findViewById(R.id.et); SharedPreferences sp = getSharedPreferences("ip", MODE_PRIVATE); sp.edit().putString("ipNumber", et.getText().toString()).commit(); } }
記得有一個許可權要加入: <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
運行看看效果:
再看撥出電話:
Android簡易實戰教程--第二十話《通過廣播接收者,對撥打到電話外加ip號》