您的位置:首页 > 其它

IP拨号器

2016-01-05 11:29 281 查看
二、布局

图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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: