Android 学习笔记 BroadcastReceiver广播… – Darker

PS:不断提升自己,是件好事…

学习内容:

1.BroadcastReceiver的使用..

2.通过BroadcastReceiver去启动Service…

 

1.BroadcastReceiver…

  广播接收者,用来接收系统和应用中的广播…Android广播机制用的地方还是很多的,比如说:当网络状态发生改变的时候,通过接收这条广播就能及时做出相应的响应,然后完成一些操作..这就是广播的机制…它自身并不实现图形用户界面…只是一个触发性的操作…

  使用广播是需要几个步骤的…

i.那就是建立一个类来实现一个广播,再类中定义响应的方法…来完成一些响应的操作…

ii.广播这个东西是需要注册的,不进行注册是无法使用的….

注册的方式有两种:

                一种是静态注册,静态注册就是配置AndroidManifest.xml文件进行配置,由系统管理receiver,属于常驻型的…

<!–这段代码添加在application之间就可以了。。。–>
<receiver android:name=”.MyBroadcast”
android:enabled
=”true”>
<intent-filter>
<action android:name=”android.intent.action.EDIT”/>
</intent-filter>
</receiver>

                          二种则是动态注册…属于非常驻型的,并且隐藏在代码块之间…不容易发现…

private BroadcastReceiver receiver;

receiver=new CallReceiver();
//动态注册广播地址…
registerReceiver(receiver,new IntentFilter(“android.intent.action.EDIT”));
//解除注册的广播地址,一定要对广播机制进行注销…
unregisterReceiver(receiver);

iii.注册完成后就是进行发送广播了…这样广播接收者就可以正常工作了…先构建一个Intent对象,然后调用sendBroadcast(Intent)方法将广播发出…

    还有一点就是,对象调用了onReceive()方法时广播才是有效的,当从这个函数返回之后,这个对象就无效了..因此广播的生命周期是非常短暂的,也就仅仅十几秒的生命周期,因此不要在其中加入一些耗时的操作,耗时的操作可以交给Service去完成,广播就是完成一些非常小的操作就可以了…粘一个代码…

package com.example.broadcast_receiver;

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

public class MyBroadcast extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String str=intent.getStringExtra(“msg”);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}

上面就是定义一个广播接收类,它继承于BroadcastReceiver,在其中完成一些相应的操作….

package com.example.broadcast_receiver;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;
public class MainActivity extends Activity implements View.OnClickListener {

private Intent intent=new Intent(Intent.ACTION_EDIT);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.broadcast).setOnClickListener(
this);
}

@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;
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.broadcast:
intent.putExtra(
“msg”, “aa”);
MainActivity.
this.sendBroadcast(intent);
break;
}
}

}

  这个就是如何在MainActivity中调用广播接收者,很简单的一个动作,就是触发按钮,然后会在屏幕上输出”aa”这条信息…很简单的一个操作,布局文件就一个按钮,没必要去粘贴…重要的是理解一下这个过程,不要忘了使用BroadcastReceiver时一定要进行注册,否则是不能进行使用的….

2.如何使用BroadcastReceiver去启动Service…

  前面已经说过,BroadcastReceiver对象的生命周期是非常短暂的…那么耗时的动作是无法在这里执行的,但是我们可以在BroadcastReceiver中去调用Service…让Service去执行耗时的服务…简单的介绍一下如何去启动Service…

i.首先我们先定义一个Service…

package com.example.broadcast_receiver;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MyService extends Service{

private MediaPlayer media;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate(){
super.onCreate();
media
=MediaPlayer.create(MyService.this, R.raw.a);
MyService.
this.media.prepare();
MyService.
this.media.start();
media.setLooping(
true);
}
@Override
public void onDestroy(){
super.onDestroy();
}
@Override
public void onStart(Intent intent,int startId){
super.onStart(intent, startId);
}
}

这里我们需要复制一首歌曲到resraw文件夹下一首歌曲…raw文件夹我们自己进行新建…

package com.example.broadcast_receiver;

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

public class MyBroadcast extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Intent newintent =new Intent(context,MyService.class);
context.startService(newintent);
String str
=intent.getStringExtra(“msg”);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}

     这个是广播类,从广播的内部去启动Service…..然后在AndroidManifest.xml文件中的<application>和</application>之间加入代码<service android:name=”.MyService” android:enable=”true”/>就搞定了…

  这样就完成了在BroadcastReceiver()内部去启动Service…..

 

 

 

 

 

 

                 

 

本文链接:Android 学习笔记 BroadcastReceiver广播…,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量