关闭

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

61人阅读 评论(0) 收藏 举报
分类:

一、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);
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6299次
    • 积分:530
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条