`
mmdev
  • 浏览: 12928505 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android广播机制

 
阅读更多

Intent有一个重要的机制就是作为不同进程间传递数据和事件的媒介。

通常我们自己的应用或者Android系统本身在某些事件来临的时候会将Intent广播出去的,而注册的Broadcast Receiver可以监听到这些Intent并且可以获得保存在Intent中的数据。

例如,在电池电量发生变化,网络连接发生变化或者是来电,来短信的时候,Android系统都会将相关的Intent进行广播

。如果注册了针对这些事件的Broadcast Receiver,那么就可以处理这些事件。

实现广播事件

Intent intent=new Intent("HelloWorld");

intent,putExtra("DATA","HHHHHHH");

sendBroadcast(intent);

通过继承BroadcaastReceiver类,并重写这个类当中的onReceiver方法来实现

public class WorkReceiver extends BroadcastReceiver

{

public void onReceive(Context context,Intent intent)

{

}

}

在onReceive方法不要有执行超过5秒的代码。如果有的话,建议在该方法中写一个线程,单独执行

注册和注销BroadcastReceiver

方法一:在AndroidManifest.xml中中注册,推荐用这种方法注册

<receiveer android:name="WorkReceiver">

<intent-filter>

<action android:name="HelloWorld"/>

</intent-filter>

</receiver>

第二种方法是在代码中注册,这种方法的好去是灵活。

IntentFilter filter=new IntentFilter("HelloWorld");

WorkReceiver wr=new WorkReceiver();

registerReceiver(wr,filter);

注销的话

unregisterReceiver(wr);

注意:wr必须为同一个对象。

下面是一个实例

package com.example.androidtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        
        menu.add(0, 0, 0, "WorkReceiver");
        return true;
    }

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		
		if(item.getItemId()==0)
		{
			Intent intent=new Intent("HelloWorld");
			this.sendBroadcast(intent);
		}
		return super.onOptionsItemSelected(item);
	}
    
    
}


WorkReceiver类

package com.example.androidtest;

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

public class WorkReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		
		Toast.makeText(context, "HelloWorld", Toast.LENGTH_LONG).show();
	}

}


AndroidMenifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name="WorkReceiver">
            <intent-filter>
                <action android:name="HelloWorld"/>
            </intent-filter>
        </receiver>
       
    </application>

</manifest>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics