微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android BroadcastReceiver 不初始化

如何解决android BroadcastReceiver 不初始化

我正在尝试将广播接收器与警报管理器一起使用,但不幸的是它在我的手机上不起作用(android 10)。广播接收器不会初始化。如果有人帮助我,我会感谢他/她

broadcastReceiver 类

`public class Alarm extends broadcastReceiver {
    @Override
    public void onReceive(Context context,Intent intent) {
        Toast.makeText(context,"Wake up",Toast.LENGTH_LONG).show();
        Log.i("fffffgggg","onReceive: reached broadcast");
        MediaPlayer mediaPlayer=MediaPlayer.create(context,Settings.System.DEFAULT_ringtone_URI);
        mediaPlayer.start();
    }`

接收方清单

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".Alarm" android:exported="true" android:enabled="true">

        </receiver>
    </application>

MainActivity 类

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent notifyintent = new Intent(MainActivity.this,Alarm.class);
        PendingIntent pIntent = PendingIntent.getbroadcast(MainActivity.this,notifyintent,0);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
//update 30 seconds
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),30*1000,pIntent);
    }

解决方法

您需要决定操作(一些字符串),配置您的广播接收器以处理该操作,并创建一个触发该操作的待处理意图。

事情是这样的。

清单:

 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name=".Alarm" android:exported="true" android:enabled="true">
           <intent-filter>
                <action android:name="MY_ACTION" />
            </intent-filter>
        </receiver>
    </application>

主要活动:

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent notifyintent = new Intent("MY_ACTION");
        PendingIntent pIntent = PendingIntent.getBroadcast(MainActivity.this,notifyintent,0);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
//update 30 seconds
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),30*1000,pIntent);
    }

另外,建议确保您在 onReceive 函数中执行了正确的操作。

,

AlarmManager 使用 Pending Intent 作为基础。 Pending Intent 它是一个意图修改,因此首先您必须在清单中定义操作,并将该值赋予 Pending Intent。有关更多详细信息,您可以阅读警报管理器 google 文档,希望对我有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?