Android - Intent、PendingIntent、IntentFilter、BroadcastReceiver

Intent 构造方式

1. Intent(String action)  2. Intent(String action,Uri uri)  3. Intent(Context context,Class anyclass)

通过Intent可以启动Activity、Service,或者发送广播:

startActivity(Intent intent),startService(Intent intent),sendBroadcast(Intent intent)

例如直接打电话的方法如下:

Intent intent = new Intent("android.intent.action.CALL", Uri.parse("tel:" + "10086"));

startActivity(intent);  //需要加上"android.permission.CALL_PHONE"权限

另外,使用intent还可以传递参数:

Activity1:                                                                                          Activity2:

Intent intent = new Intent(Activity1.this,Activity2.this);             Bundle bundle = getIntent().getExtras();

intent.putExtra("NAME","taiwan1934");                                     String name = bundle.getString("NAME");

intent.putExtra("NUM",1934);                                                      Long num = bundle.getLong("NUM");

Bundle bundle = new Bundle();

bundle.putString("ADDR","shanghai");                                     String addr = bundle.getString("ADDR");

intent.putExtras(bundle);

startActivity(intent);                 

在Activity1里使用putExtra(String key, ``` value)以及putExtras(bundle),最终都会放在一个bundle里


IntentFilter与BroadcastReceiver

IntentFilter(String action),IntentFilter可以通过addAction(String action)不断添加任何想接收的Broadcast

Broadcast的接收处理:

public class MyReceiver extends BroadcastReceiver{

    private static final String SMS_ACTION = "android.provider.telephony.SMS_RECEIVED";
    @Override
    public void onReceive(Context context,Intent intent){
        String action = intent.getAction();
        if(action.equals(SMS_ACTION)){
            /*deal with this broadcast*/
        }
    }
}
BroadcastReceiver的注册与注销:
IntentFilter mFilter = new IntentFilter();  
//IntentFilter mFilter = new IntentFilter(SMS_ACTION);
mFilter.addAction(SMS_ACTION);

private MyReceiver mReceiver = new MyReceiver();

registerReceiver(mReceiver,mFilter);

unregisterReceiver(mReceiver);

可以自己发送广播,系统也会发送各种广播,如开机广播:“android.intent.action.BOOT_COMPLETED”

PendingIntent创建方式:

1. static PendingIntent getActivity(Context context,int requestCode,Intent intent,int flags)

2. static PendingIntent getService(Context context,int requestCode,Intent intent,int flags)

3. static PendingIntent getBroadcast(Context context,int requestCode,Intent intent,int flags)

可以将PendingIntent和AlarmManager结合,在指定时间启动Activity、Service,发送Broadcast

以下是AlarmManager的两个常用方法:

void set(int type,long trigerAtMills,PendingIntent operation)

void cancel(PendingIntent)

例如在2分钟后发送一个自定义的广播:

private static final String ALARM_XTRA_TIMEOUT = "com.xxx.location.XTRA_TIMEOUT";
private final AlarmManager mAlarmManager;
private PendingIntent mXtraTimeoutIntent;

mAlarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mXtraTimeoutIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ALARM_XTRA_TIMEOUT), 0);

mAlarmManager.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 120000, mXtraTimeoutIntent);

mAlarmManager.cancel(mXtraTimeoutIntent);   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值