Android中BroadcastReceiver如何使用Intent

这一天要做一个定时打电话功能的app

前面的主Activity中,从TimePicker中获取设定的时间,从EditText中获取电话号码

使用Calendar类用获取得到的时间初始化一个calendar对象

将其转换成毫秒数(因为AlarmManager设定时间要求是毫秒数)

在Intent中设定转移的class,加上时间数据


      String number = edtCallNumber.getText().toString();
      Intent intent = new Intent(MainActivity.this, timeReceiver.class);
      intent.putExtra("CallNumber", number);
      //设置Action
      intent.setAction("com.fish.TIMINGCALL");
      PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0, intent, 0);
      //设置一次提醒闹钟
      alarmManager.set(AlarmManager.RTC_WAKEUP, setTime, pendingIntent);</span>


 alarmManager到达setTime时间之后就会发送一条“com.fish.TIMINGCALL“的广播


而到BroadcastReceiver中,重写的onReceiver函数获取要拨打的电话号码


        String callNumber = intent.getStringExtra("CallNumber");</span>


我们知道,拨打电话功能一般都是使用Intent来执行,然而开启Intent的函数startActivity却报错

仔细看看发现,这个函数是需要Context也即是上下文,而这个函数本身就不是一个Acticity,所以会报错

那怎么办呢

仔细观察onReceiver函数我们能发现,这个函数除了传进来一个Intent对象,还有一个Context对象,而Activity正是Context的子类

所以,我猜测应该可以用Context启动Intent


      context.startActivity(callIntent);</span>

好的没有报错,运行,发现停止工作,最后查询资料才发现,应该先要往要启动的Intent添加一个Flags

           callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);</span>


再次运行,程序运行正常



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值