[android] 利用广播实现ip拨号详解手机开发

广播接收者,broadcast receiver,安卓系统在使用时会产生很多的事件,比如:短信到来,电量低,拨打电话等等

 

界面布局,线性布局,EditText指定为电话号码,设置属性android:inputType=”phone”

获取SharedPreference对象,调用getSharedPreference(“config”,MODE_PRIVATE)方法

获取Editor对象,调用sp对象的edit()方法

调用Editor对象的putString(key,value)方法,存入数据

调用Editor对象的commit()方法,提交

调用sp对象的getString(name,defValue)方法,获取到存入的数据

 

新建一个类OutRecevier继承 BroadcastReceiver

在清单文件中进行配置

添加<Receiver/>节点,设置名称属性android:name=”.OutReceiver”

设置意图过滤器添加节点<intent-filter>

设置过滤节点,添加动作<action/>

设置名称android:name=”android.intent.action.NEW_OUTGOING_CALL” 关心打电话这个动作

 

当有上面动作的广播产生的时候,就会调用OutReceiver里面的onReceive()方法

需要添加权限,android.permission.PROCESS_OUTGOING_CALL

 

调用broadcastReciiver对象的getResultData()方法,可以得到传递的数据,如果打电话能获取到号码

调用Context对象的getSharedPreferences()方法,获取到sp对象

调用sp对象的getString()方法,获取到存入的数据

把获取到的号码拼接上,我们存的ip号码

调用setResultData()方法,把数据给他替换掉

 

MainActivity.java(主界面)

 

package com.tsh.ipdaili; 
 
import android.app.Activity; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
 
public class MainActivity extends Activity { 
    private EditText et_ipnum; 
     
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        et_ipnum=(EditText) findViewById(R.id.et_ipnum); 
        SharedPreferences sp=getSharedPreferences("config", MODE_PRIVATE); 
        String ipnum=sp.getString("ipnum", ""); 
        et_ipnum.setText(ipnum); 
    } 
    /** 
     * 保存 
     * @param v 
     */ 
    public void click(View v){ 
        String ipnum=et_ipnum.getText().toString().trim(); 
        SharedPreferences sp=getSharedPreferences("config", MODE_PRIVATE); 
        Editor editor=sp.edit(); 
        editor.putString("ipnum", ipnum); 
        editor.commit(); 
         
    } 
}

 

OutReceiver.java(拦截电话广播)

package com.tsh.ipdaili; 
 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
 
public class OutReceiver extends BroadcastReceiver { 
    /** 
     * 接收广播 
     */ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
        SharedPreferences sp=context.getSharedPreferences("config", Context.MODE_PRIVATE); 
        String ipnum=sp.getString("ipnum", ""); 
        String num=getResultData(); 
        setResultData(ipnum+num); 
    } 
 
}

 

 

AndroidManifest.xml (清单文件)

 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tsh.ipdaili" 
    android:versionCode="1" 
    android:versionName="1.0" > 
 
    <uses-sdk 
        android:minSdkVersion="8" 
        android:targetSdkVersion="23" /> 
    <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=".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=".OutReceiver"> 
            <intent-filter > 
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> 
            </intent-filter> 
        </receiver> 
    </application> 
 
</manifest>

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5463.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论