Android 学习笔记 BroadcastReceiver广播...

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

这里我们需要复制一首歌曲到res\raw文件夹下一首歌曲...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.....

                 

时间: 2024-10-26 07:25:51

Android 学习笔记 BroadcastReceiver广播...的相关文章

Android学习笔记--BroadcastReceiver

---恢复内容开始--- 过了一个没有假期的10.1,今天来把之前学的东西复习一下,BroadcastReceiver,Android四大组件之一,为什么这么说,百度一下,你就知道, BroadcastReceiver分为两种广播,一种是常驻型,一种是非常驻型,常驻型是在XML中国注册的被称为常驻型,在代码中注册的被称作为非常驻型, 第一步,先建立一个JAVA文件,继承与BroadcastReceiver类, MyBind.java 1 package com.wuxianedu.guangbo

Android学习笔记之广播意图及广播接收者MyBroadcastReceiver、Broadcast

(1)第一种使用xml文件进行注册 布局文件,添加一个button点击的时候进行广播 <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

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

Android学习笔记(三四):再谈Intent(上)-一些知识

在Android学习笔记(七):多个Activity和Intent中,我们先在学会了如何使用intent在代码中唤起activity.此处作深一步地学习. 什么是Intent intent是对一个操作处理的抽象描述.context可以在使用startActivity(intent)来launch一个actvivity,就如我们在学习笔记(七)中的处理,也是最常用的方式,将activity在我们的应用中整合:可以在通过sentBroast(intent)来广播给任何有兴趣的BroadcastRec

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

【转】 Pro Android学习笔记(七五):HTTP服务(9):DownloadManager

目录(?)[-] 小例子 保存在哪里下载文件信息设置和读取 查看下载状态和取消下载 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog.csdn.net/flowingflying/ 应用有时需要从web中下载一个大文件,并保存在本地,这个操作过程是标准的,因此在Android2.3引入了DownloadManager类.相关的学习也可以参考Android学习笔记(四六):互联网通信-文件下载. 小例子 先看一个小例子,如下图所示.lay

Android学习之路-------广播接收器

前言 没想到离上一篇博文的时间已经有一个多星期了,时间真的不等人啊,在这里LP告诉你们一个道理,如果现在有谁正在看管理时间的书,那么请你们把这些书放下吧,看了也没有用,因为时间我们根本管不了,我们只能管自己,如果真的想管时间,错了,应该是珍惜时间的话,那么请你们要和时间做朋友,介绍一本书给大家看<和时间做朋友> 作者是 李笑来. 不说废话了,广播开始了 目录 什么是广播 广播的种类 怎么去使用这些广播 最安全的广播 什么是广播? 广播相信有上过学的人都知道,在学校里面都有那么一个大喇叭,通知大

Pro Android学习笔记(十二):了解Intent(下)

解析Intent,寻找匹配Activity 如果给出component名字(包名.类名)是explicit intent,否则是implicit intent.对于explicit intent,关键就是component 名字,在<intent-fliter>中声明的其他属性被忽略.对于implicit intent,则根据action,category和data来进行匹配.然而一个intent fliter中可以声明多个actions,多个categories,多个data属性,因此可以满

Pro Android学习笔记(十):了解Intent(上)

Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Service(后台代码) 3.Broadcast receiver(处理广播消息的代码) 4.Content provider(抽象数据的代码) Intent基本含义 intent是通知平台处理(唤起)的动作.Android唤起的动作将取决于注册了什么动作.例如我们有个简单的Activity:IntentBaiscViewActivity.在AndroidManife