当前位置: 首页 > 知识库问答 >
问题:

我如何通过字符串从主要活动广播接收器与报警管理器?

穆飞星
2023-03-14

我创建了一个应用程序与报警管理器和广播接收器,我想通过字符串从主要活动到公共类MySchduleRecector扩展BroadcastRecector(我有报警管理器里面),然后到公共类MyStartServiceRecector扩展BroadcastRecector传递数据到静态函数......在主活动中,从具有共享首选项的编辑框中保存此变量。但是我不能在接收器内使用共享偏好。我怎么能做到这一点?

 public class MyScheduleReceiver extends BroadcastReceiver {
 public void onReceive(Context context, Intent intent) {

  int theHour = intent.getIntExtra("AlarmHour", 0);  
  int theMinute= intent.getIntExtra("AlarmMin", 0); 

AlarmManager service = (AlarmManager) context
    .getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, MyStartServiceReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
    PendingIntent.FLAG_CANCEL_CURRENT);

i.putExtra("data","1");

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());

cal.set(Calendar.HOUR_OF_DAY, theHour);  // set user selection
cal.set(Calendar.MINUTE, theMinute); 
cal.set(Calendar.SECOND, 0);

service.set(AlarmManager.RTC_WAKEUP,
    cal.getTimeInMillis(), pending);

}


public class MyStartServiceReceiver extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {

  Intent service = new Intent(context, AlarmService.class);

 context.startService(service);

 String result = intent.getStringExtra("data");

 String msg=result;
 try {

    ArduBtTimer.sendData(msg);
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

共有2个答案

郭兴平
2023-03-14

我认为你应该发送你想要保存的信息使用BroadCastRecector并保存它与SP在那里。

以下是从接收者向活动发送信息的示例:

>

  • 创建一个内部类,该类在要获取数据的活动中扩展BroadcastRecector

    private BroadcastReceiver ReceivefromService = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //get the data using the keys you entered at the service
            String IncomingSms=intent.getStringExtra("incomingSms");//
            String phoneNumber=intent.getStringExtra("incomingPhoneNumber");
    
        }
    };
    

    将此添加到onPause()

    @Override
    protected void onPause() {
        super.onPause();
        try {
            unregisterReceiver(ReceivefromService);
        } catch (IllegalArgumentException e) {
            if (e.getMessage().contains("Receiver not registered")) {
                Log.i("TAG","Tried to unregister the reciver when it's not registered");
            }
            else
            {
                throw e;
            }
        }
    }
    

    将此添加到onResume()

    protected void onResume() {
        super.onResume();
        filter.addAction("android.intent.action.SmsReceiver");
        registerReceiver(ReceivefromService, filter);
        //the first parameter is the name of the inner class we created.
    }
    

    在接收器/服务内部创建一个意图,如下所示启动广播:

    Intent i = new Intent("android.intent.action.SmsReceiver").putExtra("incomingSms", message);
    i.putExtra("incomingPhoneNumber", phoneNumber);
    context.sendBroadcast(i);
    

    希望它能帮到你。。。

  • 法和安
    2023-03-14

    试试这个:

     where u want to set value:
     i.putExtra("data",yourstring); 
     and for recieve: 
     String value = intent.getStringExtra("data");
    
     类似资料:
    • 我想在多个特定的日期和时间上创建通知,这些日期和时间存储在数据库中。我可以在正确的日期和时间得到通知,但我后来注意到,我也在第二天随机得到通知。每当我重新启动模拟器时,它们就会出现。 所以,似乎我不能停止报警管理器或广播接收器。我曾尝试向AlarmManager的cancel方法提供pendingIntent,但没有成功。我也使用切换按钮来启用/禁用通知,但没有效果 下面是我的代码。 这是数据库结

    • 我目前正在使用SharedReferences跟踪通过AlarmManager启动的BroadcastReceiver中要执行工作的项列表。除了一个特定的场景外,一切都很好。当我触发一个新项目来执行工作时,让它完成工作,然后删除该项目(全部通过SharedReferences编辑),它在应用程序运行时工作得很好。当列表中没有任何内容,我打开任务管理器并终止应用程序时,该项突然出现在Broadcas

    • 嗨,我有一个应用程序,比如应用程序(不是应用程序),它检查当前运行的应用程序与用户选择的应用程序列表,如果匹配,那么我有我的代码。我有一个服务,它没有任何循环调用StartupRec 我的服务.class startup接收方。班级 } 检查正在运行的应用程序接收器。类 < li >以下是我观察到的情况,当我将闹钟时间设置为10ms时,我的手机在连接到笔记本电脑时,手机的检测在15秒钟后发生延迟,

    • 我正在尝试将一个字符串从一个activity传递给广播接收器类。我的代码: 活动.类: MyReceiver.Class: 我的清单文件: 当我执行代码时,显示为完全空的!为什么?

    • 我在一个独立于主活动的文件中注册了一个广类型接收器,并且基于在广类型接收器中接收到的通知,我想在主活动中执行一些操作。 我的问题是,将通知从广播接收器传递到主活动的推荐方式是什么?是否应该在iam在广播接收器文件中注册的每个操作中创建一个公共方法?或者应该使用将在主活动中实现的接口。 注:广泛的演员接受者登记为7个行动

    • 我需要一些帮助来理解当我可以期望我的广播接收器在清单中注册时工作,而不是必须从正在运行的活动或服务中注册。 因此,例如,如果我用以下意图筛选器注册了一个独立的接收器,那么它在没有对它的服务/活动引用的情况下就能正常工作: 但是,如果将替换为,则不会触发接收器(Android文档) 从我在这个站点上发现的,你必须从一个已经运行的活动或服务中注册这个接收器,以使其工作(Post)。 > 有人能告诉我,