【Android基础】三、四大组件(一)

一、Activity
二、BroadcastReciver
1)getResultData():获取广播发送的数据,此data是在清单文件中声明广播接收者的时候设置的data标签,在发送广播时对Intent对象setData();
2)以下两个方法只有在有序广播中才有效
setResultData();//修改广播数据
absorbBroadcast();//拦截广播
3)intent.getAction();//获得广播意图的动作
intent.getExtras();//返回传递数据的Bundle对象
intent.getData();
1.电话拨号器
权限:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

动作:
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>

通过getResultData()方法获取所拨的电话号码,setResultData(number)方法修改电话号码
2.短信接收器
权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

动作:
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

短信内容封装在intent中的Bundle对象里,以pdus为键取出Bundle对象中存储的Object数组,每一个数组元素是一条短信,强转成字节数组后组建成SmsMessage对象,电话号码是通过SmsMessage的getOriginatingAddress()方法获取的
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("接收到了广播");
//短信内容封装在intent
Bundle bundle = intent.getExtras();
//以pdus为键取出object数组,每一个数组的元素是一条短信
Object[] objects = (Object[])bundle.get("pdus");
for(Object object:objects){
SmsMessage sms = SmsMessage.createFromPdu((byte[])object);
if(sms.getOriginatingAddress().equals("10086")){
abortBroadcast();
SmsManager.getDefault().sendTextMessage(sms.getOriginatingAddress(), null, sms.getMessageBody(),null,null);
}
}
}

3.监听SD卡状态改变
sd卡不同状态发送不同意图的广播,这里广播接收者接收多种广播,通过intent.getAction()获取意图区别不同的广播
动作:

<action android:name="android.intent.action.MEDIA_MOUNTED"/>  
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>  
                <action android:name="android.intent.action.MEDIA_REMOVED"/>  
                <data android:scheme="file"/>  
@Override  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if(action.equals("android.intent.action.MEDIA_MOUNTED")){  
            Toast.makeText(context,"SD卡准备就绪",Toast.LENGTH_SHORT).show();  
            System.out.println("SD卡准备就绪");  
        }else if(action.equals("android.intent.action.MEDIA_UNMOUNTED")){  
            Toast.makeText(context,"SD卡被移除",Toast.LENGTH_SHORT).show();  
            System.out.println("SD卡被移除");  
        }else if(action.equals("android.intent.action.MEDIA_REMOVED")) {  
            Toast.makeText(context,"SD卡被拨出",Toast.LENGTH_SHORT).show();  
            System.out.println("SD卡被拔出");  
        }  
    }  

4.开机启动
在广播接收者中启动Actiivty时,要通过intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)开启一个新的栈
权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

动作:
<action android:name="android.intent.action.BOOT_COMPLETED"/>

5.监听应用状态改变
应用包的名称是通过intent.getData()取得的
动作:
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>

发送广播:sendBroadcast(intent);
发送有序广播:sendOrderBroadcast(intent,)//可以指定最终接收者

在代码中配置广播接收者

//创建广播接收者对象  
Receiver receiver = new Receiver();  
//创建IntentFilter对象  
IntentFilter filter = new IntentFilter();  
//添加Action  
filter.addAction(Intent.ACTION_SCREEN_OFF);  
filter.addAction(Intent.ACTION_SCREEN_ON);  
//注册广播接收者  
registerReceiver(receiver,filter);
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/auiyhnlk/article/details/51555177
个人分类: Android基础
想对作者说点什么? 我来说一句

spring四大组件

2008年04月15日 179B 下载

没有更多推荐了,返回首页

不良信息举报

【Android基础】三、四大组件(一)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭