Unity - приемник Android Broadcast не был вызван
Я использую Unity, чтобы установить сигналы тревоги для проекта. (Обычно не используют Unity, но это требование по разным причинам). Я написал сигнал тревоги, как этот, и этот метод вызывается из Unity с параметром 5:
public void SetAlarm (float time)
{
Intent intent = new Intent(context, AlarmClockPlugin.class);
intent.setAction("ALARM_INTENT");
PendingIntent pending = PendingIntent.getBroadcast(context,0,intent,0);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (long) (1000 * time), pending);
}
Этот класс тревоги также наследуется от BroadcastReceiver и переопределяет метод OnReceive следующим образом:
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
// Write toast text for now
Toast.makeText(context,"Broadcast received",Toast.LENGTH_LONG).show();
wl.release();
}
Я регистрирую широковещательный приемник в манифесте так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tombuild.myapp">
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true">
<receiver android:process =":remote" android:name="com.tombuild.myapp.AlarmClockPlugin">
<intent-filter>
<action android:name="ALARM_INTENT"/>
</intent-filter>
</receiver>
</application>
</manifest>
Но, к сожалению, onReceive не вызывается - по истечении 5 секунд уведомление о тостах вообще не появляется, почему это так?
1 ответ
Я не знаком с Unity, но есть очевидные отличия Unity и Android Studio от кода, который вы опубликовали, например, отсутствие Activity в манифесте. Почему бы не попробовать более простой пример в вашем методе setAlarm.
...
Intent intent = new Intent();
intent.setAction("com.tombuild.myapp.ALARM_INTENT");
sendBroadcast(intent);
...
И просто поместите тост в методе onReceive.
Существует очень простое руководство по BroadcastReceivers на TutorialsPoint, с которого я начал.