Nicht in der Lage zu empfangen android.Absicht.Aktion.EVENT_REMINDER broadcast
Ich würde gerne eine Anwendung schreiben, die ausgelöst wird, wenn eine Kalender-Erinnerung. Ich merke, es gibt keine offiziell dokumentierte Weg, dies zu tun, aber ich habe gesehen, in das Protokoll, dass, wenn mein Kalender Wecker klingelt auf meinem Handy (Droid X), AlertReceiver zeigt an, dass er erhalten hat, ein android.Absicht.Aktion.EVENT_REMINDER:
01-03 11:03:00.029 D 1523 AlertReceiver onReceive: a=android.intent.action.EVENT_REMINDER Intent { act=android.intent.action.EVENT_REMINDER dat=content://com.android.calendar/129407058000 flg=0x4 cmp=com.android.calendar/.AlertReceiver (has extras) }
So, ich habe eine einfache BroadcastReceiver:
package com.eshayne.android;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class CalendarTest extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
android.util.Log.i("CalendarTest", "CalendarTest.onReceive called!");
}
}
mit diesem manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eshayne.android"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.READ_CALENDAR" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<receiver android:name="com.eshayne.android.CalendarTest">
<intent-filter>
<action android:name="android.intent.action.EVENT_REMINDER" />
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
Leider, wenn ich diese auf meinem Handy und die Einrichtung eines Kalender-Ereignis mit der Erinnerung, wenn die Erinnerung Warnungen, ich sehe immer noch die AlertReceiver log-Eintrag, aber nicht von mir.
Habe ich auch Lesen Sie hier über einige system-intents, die eine Registrierung erforderlich, die über code statt im manifest. So, ich habe versucht, das folgende statt:
package com.eshayne.android;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
public class CalendarTestDisplay extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
android.util.Log.i("CalendarTestDisplay", "received broadcast");
}
},
new IntentFilter("android.intent.action.EVENT_REMINDER"));
}
}
mit dieser modifizierten manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eshayne.android"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.READ_CALENDAR" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name=".CalendarTestDisplay"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />
</manifest>
mit keinem besseren Ergebnis.
Irgendwelche Ideen, was ich möglicherweise fehlen? Oder irgendwelche anderen Ideen, wie ich vielleicht in der Lage zu erfassen, Kalender, alarm vorkommen?
Dank,
Ethan
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, was Sie zu tun versuchen, ist nicht Teil des Android-SDK, vor allem, weil der Kalender ist nicht Teil des Betriebssystems.
Dass gesagt wird, die mindestens müssen Sie eine
<data>
element, um Ihre<intent-filter>
, da dieIntent
hat eineUri
.Allerdings bin ich mir ziemlich sicher, das wird nicht funktionieren, da die
Intent
auch spezifisch identifiziert eine Komponente (com.android.calendar/.AlertReceiver
). AFAIK war das in derIntent
am Anfang, und daher dieIntent
wird nur geliefert, um die Komponente, ignorieren Sie alle anderen routing-Regeln. Es ist denkbar, die aufgelisteten Komponente zeigte nur nachIntent
Auflösung, aber ich glaube nicht, dass das, wie diese log-Einträge arbeiten.Müssen Sie Daten-Schema "Inhalte" in der intent-filter.
Verwendung von manifest-Daten hinzufügen-element im intent-filter
Mithilfe von code hinzufügen datascheme in einem Funktionsaufruf
Ist es möglich, die broadcast-intent "android.Absicht.Aktion.EVENT_REMINDER" Arbeit durch Angabe DataAuthority und DataScheme in Ihren Vorsatz-filter zusammen mit Ihren Absichten handeln.Sie müssen angeben, DataAuthority als "com.android.Kalender" und DataScheme als "Inhalt".
den broadcast-intent "android.Absicht.Aktion.EVENT_REMINDER" wird nur ausgelöst wird, wenn ein alarm Benachrichtigung muss gebucht werden, für eine Erinnerung
legen Sie eine Benachrichtigung für Ihre VERANSTALTUNG (Z.B.: 10 Minuten vor der jeweiligen Veranstaltung), um für den broadcast-intent "android.Absicht.Aktion.EVENT_REMINDER" arbeiten