您的位置:首页 > 移动开发 > Android开发

Mars Chen动态注册Broadcast广播监听器的实现

2015-08-28 16:42 651 查看
总结:

(1)动态注册Broadcast监听器与在manifest直接配置receiver不同在于:

manifest中的receiver及时你的activity和应用程序退出了,该监听依然还在,类似Windows中注册表的信息;

而动态注册broadcast监听器可以在任何函数根据用户需求随时释放监听器,不再监听对应的broadcast消息

(2)manifest文件中<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

这个配置很重要。需要将每类broadcast消息的权限进行设置,如果不做该步骤,则动态注册后的监听器也无法工作。

1.AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.testbroadcastreciver2"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="18" />

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.testbroadcastreciver2.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>

    </application>

    

    <!-- 这句话很重要,没有这个设置,reciever无法 响应-->

    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

   

</manifest>

2.MainActivity.java //绑定和解除对监听器的绑定

package com.example.testbroadcastreciver2;

import android.app.Activity;

import android.content.IntentFilter;

import android.os.Bundle;

import android.view.Menu;

import android.view.View;

import android.widget.Button;

public class MainActivity extends Activity {

private Button register = null;
private Button unregister = null;
private TestReceiver testReceiver = null;

//定义接收短信操作
private static final String SMS_ACTION = "android.provider.Telephony.SMS_RECEIVED";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        

        register = (Button)findViewById(R.id.register);

        unregister = (Button)findViewById(R.id.unregister);

        

        register.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
testReceiver = new TestReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SMS_ACTION);

MainActivity.this.registerReceiver(testReceiver, intentFilter);
}
});

        

        unregister.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.unregisterReceiver(testReceiver);
}
});

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

    

}

3.TestReceiver.java //实现监听器

package com.example.testbroadcastreciver2;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.telephony.SmsMessage;

public class TestReceiver extends BroadcastReceiver {
public TestReceiver() {
;
}

/* (non-Javadoc)
* @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("Receive a message");

Bundle bundle = new Bundle();
bundle = intent.getExtras();

Object[] myOBJpdus = (Object[])bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
System.out.println(messages.length);

for (int i = 0; i<myOBJpdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])myOBJpdus[i]);
System.out.println(messages[i].getDisplayMessageBody());
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息