ich ein Android Wear App erstellen, und ich möchte diese App Benachrichtigung einige Male (In diesem Code, den ich meinen Dienst für die Erstellung Meldung alle 15 Minuten anrufen möchten) erstellenAlarmmanager nicht mein Service von Android Wear App rufen
Wenn Ich registriere meinen Dienst bei AlramManager, ich kann diese Aufgabe in OS erstellt sehen (adb shell dumpsys alarm > dump.txt
), aber ich kann die Benachrichtigung oder das Protokoll nicht sehen, um den Dienstlauf zu beweisen. Ich teste meinen Dienst mit startService
und sowohl die Benachrichtigung als auch das Protokoll funktionierten korrekt, also weiß ich nicht, wo das Problem ist. Hier sind die Codes verwende ich:
MyAlarmService.java
public class MyAlarmService extends Service {
@Override
public void onCreate() {
super.onCreate();
Log.d("From serivce","Service run once");
// Create notification
Context context = this;
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle(context.getString(R.string.NotificationTitle))
.setSmallIcon(R.mipmap.ic_launcher_hafez)
.setContentText("Some text");
Notification secondPage =
new NotificationCompat.Builder(context)
.setContentTitle(context.getString(R.string.NotificationTitle))
.setContentText("Some text")
.build();
NotificationCompat.WearableExtender extender = new NotificationCompat.WearableExtender();
extender.addPage(secondPage);
builder.extend(extender);
NotificationManagerCompat mgr = NotificationManagerCompat.from(context);
int NotificationId = new Random().nextInt(5200);
mgr.notify(NotificationId, builder.build());
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
AndroidManifest.xml
...
<service android:name=".MyAlarmService" />
...
Der Code, den Dienst in Alarmmanager registrieren:
Context context = getActivity().getApplicationContext();
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
Intent intent = new Intent(context, MyAlarmService.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);
Der Inhalt dump.txt
Current Alarm Manager state:
...
Batch{91609e num=3 start=7228838 end=7233540 flgs=0x8}:
...
RTC_WAKEUP #0: Alarm{18a777f type 0 when 1467992333472 org.rashno.mypackagename}
tag=*walarm*:org.rashno.mypackagename/.MyAlarmService
type=0 whenElapsed=-6s582ms when=2016-07-08 20:08:53
window=+11m15s0ms repeatInterval=900000 count=0 flags=0x0
operation=PendingIntent{397c34c: PendingIntentRecord{de77f95 org.rashno.mypackagename broadcastIntent}}
...
Alarm Stats:
...
u0a57:org.rashno.mypackagename +9ms running, 1 wakeups:
+9ms 1 wakes 1 alarms, last -1m33s417ms:
*walarm*:org.rashno.mypackagename/.MyAlarmService
...
...
Ein Vorschlag (noch keine * Lösung *; ^): Versuchen Sie, den Dienst in Ihrem Manifest auf exported = "true" 'zu setzen. – String
@String Ich versuche das, aber das Ergebnis ist das gleiche wie zuvor –