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 文档,希望对我有所帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...