1

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

广播接收器类

`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, 0, notifyintent, 0);

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

2 回答 2

0

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

它是这样的。

显现:

 <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, 0, notifyintent, 0);

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

此外,建议确保您在onReceive功能中获得了正确的操作。

于 2021-03-05T18:50:37.140 回答
0

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

于 2021-03-05T20:27:51.277 回答