Androidx学习笔记(56)--- IP拨号器

来源:互联网 发布:scdma是什么网络类型 编辑:程序博客网 时间:2024/04/30 19:49


IP拨号器

原理:接收拨打电话的广播,修改广播内携带的电话号码 * 定义广播接收者接收打电话广播

public class CallReceiver extends BroadcastReceiver {    //当广播接收者接收到广播时,此方法会调用    @Override    public void onReceive(Context context, Intent intent) {        //拿到用户拨打的号码        String number = getResultData();        //修改广播内的号码        setResultData("17951" + number);    }}
  • 在清单文件中定义该广播接收者接收的广播类型

    <receiver android:name="com.exp.ipdialer.CallReceiver">    <intent-filter >        <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>    </intent-filter></receiver>
  • 接收打电话广播需要权限

    <uses-permission android:name="android.permission.PROCESS_O LLS"/>
  • 即使广播接收者的进程没有启动,当系统发送的广播可以被该接收者接收时,系统会自动启动该接收者所在的进程

MainActivity

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();
}

广播

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

<receiver android:name=".CallReceiver">
<intent-filter >
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>



0 0
原创粉丝点击