android广播接收者 ip电话拔号器

1.广播的概念

    1. 现实:电台通过发送广播发布消息,买个收音机,就能收听
    2. Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件。

     Android系统在运行的过程中,会产生很多事件,比如开机、电量改变、收发短信、拨打电话、屏幕解锁。


 2. 创建广播接收者

      1.定义java类继承BroadcastReceiver

      2.在清单文件中定义receiver节点,定义name属性,指定广播接收者java类的全类名

      3.在intent-filter的节点中,指定action子节点,action的值必须跟要接收的广播的action匹配,比如,

          如果要接收打电话的广播,那么action的值必须指定为


            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />

3.IP拔号电话

   直接上代码

       MainActivity.java

     

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void onClick(View v){
    	EditText et = (EditText) findViewById(R.id.et);
    	SharedPreferences sp = getSharedPreferences("ip", MODE_PRIVATE);
    	sp.edit().putString("ipNumber", et.getText().toString()).commit();
    }
    
}


CallReceiver.java

public class CallReceiver extends BroadcastReceiver {

	//接收到广播时就会调用
	@Override
	public 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;
			
			//把新的号码重新放入广播中
			setResultData(number);
			
			abortBroadcast();
		}
		
	}

}


AndroidManifest.xml


在清单文件中定义该广播接收者接收的广播类型

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.itcastest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
	 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.ipcall.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
					
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
          <receiver android:name="com.example.ipcall.CallReceiver">
            <intent-filter >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

activity_main.xml

<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="onClick"
	    />
</LinearLayout>


即使广播接收者的进程没有启动,当系统发送的广播可以被该接收者接收时,系统会自动启动该接收者所在的进程


以上一个android ip电话拔号器就完成了

猜你喜欢

转载自blog.csdn.net/tong6320555/article/details/50786267