Android 接收器未获取数据

Android 接收器未获取数据,android,android-intent,broadcastreceiver,Android,Android Intent,Broadcastreceiver,因此,我的接收器工作正常…正在发送和接收等待的意图,所有这些都工作正常,直到发生此情况…我有一个包含警报声音的微调器,当用户单击其中的某个项目时,我希望获取位置并将其发送给接收器..问题是接收器始终获取值为0..有人可以帮助吗 这是我闹钟活动中的微调器 int choose_alarm_sound; spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override

因此,我的接收器工作正常…正在发送和接收等待的意图,所有这些都工作正常,直到发生此情况…我有一个包含警报声音的微调器,当用户单击其中的某个项目时,我希望获取位置并将其发送给接收器..问题是接收器始终获取值为0..有人可以帮助吗

这是我闹钟活动中的微调器

int choose_alarm_sound;

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {



                String selected = parent.getItemAtPosition(position).toString();
                choose_alarm_sound = position;
                Intent broad_Intent = new Intent();
                Log.e("TEST 1", choose_alarm_sound + "");



                switch (selected) {
                    case "Buzzer": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.buzzer);
                        mp.start();

                        break;
                    }
                    case "Doorbell": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.doorbell);
                        mp.start();

                        break;
                    }
                    case "FirePager": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.firepager);
                        mp.start();

                        break;
                    }
                    case "Ring": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.ring);
                        mp.start();

                        break;
                    }
                    case "SchoolBell": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.schoolbell);
                        mp.start();

                        break;
                    }
                    case "Siren": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.siren);
                        mp.start();

                        break;
                    }
                    case "Siren2": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.siren2);
                        mp.start();

                        break;
                    }
                    case "SmokeAlarm": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.smokealarm);
                        mp.start();

                        break;
                    }
                    case "Warning": {
                        mp = MediaPlayer.create(alarmClockActivity.this, R.raw.warning);
                        mp.start();

                        break;
                    }

                }
                broad_Intent.putExtra("alarm_choice", choose_alarm_sound);
                Log.e("TEST 2", choose_alarm_sound + "");
                sendBroadcast(broad_Intent);
}

所以我的日志测试1和测试2总是有相同的值,这是正确的值,但是接收器中的测试3每次都是0。所以我的接收器没有收到这个意图。为什么…任何帮助都将不胜感激

舱单:

 <?xml version="1.0" encoding="utf-8"?>
<receiver android:name=".AlarmReceiver">
    <intent-filter>
        <action android:name="MyAlarmReceiver"/>
    </intent-filter>
</receiver>



因为您正在将
选择“报警声”
设置为
id
,而不是
位置

您需要发送带有操作的广播
意图
,并且当Android看到该操作时,您需要告诉它调用您的
广播接收器
。试着这样做:

在舱单中:

<receiver android:name=".AlarmReceiver">
    <intent-filter>
        <action android:name="MyAlarmReceiver"/>
    </intent-filter>
</receiver>

这会将广播中的动作设置为“MyAlarmReceiver”。

不是真的。我只是将其设置为position,接收者仍然会得到0@Marc的值,因为您的代码现在在您的帖子中,是的,确实,您正在将choose_alarm_sound设置为id,您将其从long转换为int,而不是使用实际的微调器位置。将choose\u alarm\u sound更改为整数(在代码中它被写为long),更改choose\u alarm\u sound=(int)id;选择_报警_声音=位置;它会起作用的我就是这么做的。。。测试3仍然为0,这意味着接收器仍然没有正确接收到该值@对不起,我不知道还能告诉你什么。如果你的接收者正在发射,那么我认为意图不是空的,但也没有你的值是没有意义的。这个接收者在AndroidManifest中注册了吗?在你发布的代码中,除了额外的之外,你从来没有在
广义意图
中添加任何内容。调用
sendBroadcast()
时不应发生任何事情,因为广播
Intent
中未设置任何操作或组件。您的
AlarmReceiver.onReceive()
永远不会被调用。请编辑您的帖子以反映您正在使用的实际代码!那么如果我不…它应该以任何一种方式发送,不是吗?我的代码的其余部分与这一部分无关…这个特定的意图应该是让我将项目在微调器中的位置发送到接收器…因此,如果sendbroadcast不在意图中添加额外的内容…我应该如何将该意图发送到接收器?正在调用接收器…正在调用接收器中的日志(测试3),但返回0,这不是正确的值@DavidWasserSorry,这毫无意义。如果只发送一个“额外”的广播
Intent
,Android不知道该将
Intent
发送给谁。广播
Intent
s是全系统的,Android会将
Intent
发送给所有注册接收它的听众。在我看来,还有其他原因导致调用您的
AlarmReceiver.onReceive()
,这就解释了为什么在
Intent
中没有您期望的“额外”。请张贴您的清单,也许这将有助于解决这个谜!但是不发送广播只发送到广播接收器?在我的情况下,我只有一个接收器,这意味着我的意图应该只授予我的AlarmReceiver.class…这真的让我很烦我已经有一段时间没能解决这个问题了,我还有几个小时就要到期了@戴维德瓦塞诺。当你发送一个广播
Intent
时,Android会将它发送给所有注册的听众。听众需要指出他们感兴趣的广播类型。监听器通过指定
Intent
过滤器(通过编程方式或在清单中)来实现这一点。我发现您没有在清单中为
AlarmReceiver
指定
。因此,除非您已通过编程将其注册为侦听器,否则无法触发
AlarmReceiver
。您是否在任何地方调用了
registerReceiver()
?请张贴相关代码!我很确定这会起作用。它没有。相同的输出…测试3仍然是0…谢谢你。不管怎样,我意识到在添加此代码后,接收器被调用了两次…所以它已经被调用。如果AlarmReceiver已经被调用,那么你必须在某个地方注册它!请扫描您的代码以查找对AlarmReceiver的引用。否则这毫无意义!在您的原始帖子中,您声称“我的接收器工作正常……发送和接收的意图待定”,这意味着您正在代码中的其他地方使用
AlarmReceiver
。请把那个密码寄出去。
<receiver android:name=".AlarmReceiver">
    <intent-filter>
        <action android:name="MyAlarmReceiver"/>
    </intent-filter>
</receiver>
Intent broad_Intent = new Intent("MyAlarmReceiver");