码迷,mamicode.com
首页 > 移动开发 > 详细

Android(java)学习笔记173:Sd卡状态广播接收者

时间:2015-08-18 18:15:30      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

1.广播接受者
>什么是广播。收音机。
电台:对外发送信号。
收音机:接收电台的信号。

>在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去,有短信发送进来。

使用广播机制步骤
(1)买收音机
        public class SDStatusReceiver extends BroadcastReceiver
(2)装电池
         <receiver android:name="com.itheima.sdstatus.SDStatusReceiver" >
(3)调频道,调到你关心的频道
         <intent-filter >
                <!-- 3.调频道 -->
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <data android:scheme="file"/>
         </intent-filter>


2.广播事件的两种类型。
(1) 有序广播
> 接受者有优先级,接受按照先后顺序接受,类似中央向下传文件。高优先级的接受者可以把广播消息给拦截,还可以修改广播的数据。
(2)无序广播
> 接受者没有优先级,没有先后顺序。类似听广播,看新闻联播。不可以被拦截。
> sendBroadcast(intent)

3.有序广播和无序广播没有什么本质的区别
相同点:
           无序广播也是按照先后顺序接受的
不同点:
           无序广播如果拦截,会拦截失败。
不可以修改数据。

 

4.下面查看这个广播接收者案例:

下面是工程:

技术分享

 

这里我们MainActivity.java和activity_main.xml文件,我们不做什么修改。

主要还是按照上面的使用广播机制步骤:

(1)买收音机,自定义一个SDStatusReceiver类,它继承自BroadcastReceiver(BroadcastReceiver是提供的基类API接口)

onReceive方法是接收到广播执行的操作内容

package com.itheima.sdstatus;

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

/**
 * 1.买好了一个收音机
 */
public class SDStatusReceiver extends BroadcastReceiver {

    // 用来接收广播事件的,一旦广播消息到来,就会执行onreceive方法
    @Override
    public void onReceive(Context context, Intent intent) {
//public String getAction():返回一个action的名称 String action
= intent.getAction(); if ("android.intent.action.MEDIA_UNMOUNTED".equals(action)) { System.out.println("哈哈哈----SD卡被卸载了。"); Toast.makeText(context, "哈哈哈----SD卡被卸载了,微信头像暂不可用", 0).show(); }else if("android.intent.action.MEDIA_MOUNTED".equals(action)){ Toast.makeText(context, "哈哈哈----SD卡被挂载了", 0).show(); } } }

(2)(3)装电池、调频道,在AndroidManifest.xml清单文件中进行配置。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itheima.sdstatus"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itheima.sdstatus.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>
        <!-- 2.装电池 -->
        <receiver android:name="com.itheima.sdstatus.SDStatusReceiver" >
            <intent-filter >
                <!-- 3.调频道,这里我们可以设置多个action,监听多个广播频道 -->  
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <data android:scheme="file"/>
            </intent-filter>
        </receiver>
        
    </application>

</manifest>

 

注意:就算是我们的应用程序没有启动运行只要SD卡卸载或者安装,就会促使应用程序启动线程运行,这样的话运行onReceive()里面的代码。这里采用是注册事件的机制,一旦系统检查到SD卡卸载或者安装Android系统会主动注册监听(SD卡卸载或者安装)的应用程序

Android(java)学习笔记173:Sd卡状态广播接收者

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4739857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!