eine Frage zum Brodcastreceiver....

C

coreytaylor211

Fortgeschrittenes Mitglied
5
Hallo zusammen,
Ich habe eine Frage zum brodcastreceiver, wenn ich möchte das die onReceive Methode aufgerufen wird was muss ich machen ??

Also ich habe ein Widget was sich nicht aktualisiert, ich habe zwei Klassen in zwei separaten Dateien. Die erste ist
Code:
public class Klasse1 extends AppWidgetProvider {

     // mach was

}

die zweite Klasse ist der brodcastreceiver
Code:
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {

   // mach was


}

wenn ich jetzt möchte das die Klasse1 nach 30 Minuten das Widget aktualisiert habe ich das so versucht
Code:
public void onEnabled(final Context context) {

        AlarmManager alarmM = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        PendingIntent pendingI = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);       
      
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            
               alarmM.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 * 4, pendingI);

}

In der AndroidManifest habe ich das so gemacht
Code:
    <application android:label="@string/app_name" android:icon="icon"
                 android:allowBackup="false">
            <receiver android:name=".Klasse1"
                     android:label="@string/app_name"
                     android:icon="@drawable/icon">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
                </intent-filter>
                <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widget"/>
            </receiver>
</application>

Jetzt meine Frage die onReceive wird nie aufgerufen, ich wieß nicht warum. Bitte um Hilfe.
 
Hallo Corey,

wo ist denn dein onReceive oben ???

Hier ein Beispiel für einen Service


<receiver android:name="de.xxxx.xxxx.RecognitionBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>

und die Klasse dazu

public class RecognitionBootReceiver extends BroadcastReceiver
{


@override
public void onReceive(Context context, Intent intent)
{
//Log.d(TAG, "onReceive");
}
}
[doublepost=1479492723,1479492042][/doublepost]Nachtrag für den Alarmreciever musst du anders vorgehen

<receiver
android:name=".service.service_alarmreceiver">
</receiver>


public class service_alarmreceiver extends WakefulBroadcastReceiver
{
@override
public void onReceive(Context context, Intent intent)
{

}
}

AlarmManager alarmManagerSensor = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent IntentSensor = new Intent(context, service_alarmreceiver.class);
IntentSensor.setData(Uri.parse("custom://TRACK_SENSOR"));
IntentSensor.setAction("TRACK_SENSOR");
PendingIntent pendingIntentSensor = PendingIntent.getBroadcast(context, 0, IntentSensor, 0);
alarmManagerSensor.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + start_zeitverzoegerung,intervalSENSOR * 60000 ,pendingIntentSensor);
 
Zuletzt bearbeitet:
swa00 schrieb:
Hallo Corey,

wo ist denn dein onReceive oben ???

Hier ein Beispiel für einen Service


<receiver android:name="de.xxxx.xxxx.RecognitionBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>

und die Klasse dazu

public class RecognitionBootReceiver extends BroadcastReceiver
{


@override
public void onReceive(Context context, Intent intent)
{
//Log.d(TAG, "onReceive");
}
}
[doublepost=1479492723,1479492042][/doublepost]Nachtrag für den Alarmreciever musst du anders vorgehen

<receiver
android:name=".service.service_alarmreceiver">
</receiver>


public class service_alarmreceiver extends WakefulBroadcastReceiver
{
@override
public void onReceive(Context context, Intent intent)
{

}
}

AlarmManager alarmManagerSensor = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent IntentSensor = new Intent(context, service_alarmreceiver.class);
IntentSensor.setData(Uri.parse("custom://TRACK_SENSOR"));
IntentSensor.setAction("TRACK_SENSOR");
PendingIntent pendingIntentSensor = PendingIntent.getBroadcast(context, 0, IntentSensor, 0);
alarmManagerSensor.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + start_zeitverzoegerung,intervalSENSOR * 60000 ,pendingIntentSensor);

Erstmal lieben Dankfür deine Hilfe, meine onReceive hatte ich nur nicht mit ins Forum geschrieben aus Zeitgründen :), habe das jetzt alles mal verglichen.

Ich verstehe jetzt nur den die Zeile in der Manifest
Code:
android:name=".service.service_alarmreceiver">
ich habe da ja momentan die Klasse1 drin, somit werden alle logs ausgegeben außer der onReceive Methode.
Wenn ich in der Manifest meine AlarmManagerBroadcastReceiver eintrage, wird nur die onReceive Methode aufgerufen sonst nix.
 
Corey,

halte dich jetzt bitte nicht an der Klassenbezeichnung fest ,

ich habe dir lediglich ein laufendes Beispiel von mir kopiert , anstatt dir irgend einen Link zu schicken,
von dem ich nicht weis , ob der so funktioniert .. :)

wichtig ist die Ableitung von WakefulBroadcastReceiver


und den Init , den ich mit dem Alarmamanger mache
 
Habe alles so wie du es hast, leider geht es nicht. Hier noch einmal zum Abgleich
Code:
public class Klasse1 extends AppWidgetProvider {

     public void onEnabled(final Context context) {
        super.onEnabled(context);

        Log.d("LOG_TAG", "onEnabled aufgerufen");

        AlarmManager alarmM = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        PendingIntent pendingI = PendingIntent.getBroadcast(context,0,intent,0);      
       
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            alarmM.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 60000, pendingI);
         }
     }


}


Und Hier die AlarmManagerBroadcastReceiver.class
Code:
public class AlarmManagerBroadcastReceiver extends WakefulBroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
     Log.d("LOG_TAG", "onReceive aufgerufen");
   }

}

und zum Schluss nochmal die Manifest
Code:
    <application android:label="@string/app_name" android:icon="@drawable/icon"
                 android:allowBackup="false">
            <receiver android:name="de.platzhalter.Klasse1"
                     android:label="@string/app_name"
                     android:icon="@drawable/icon">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
                </intent-filter>
                <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widget"/>
            </receiver>
</application>


wenn du noch einmal drüber gucken könntest ? Ich weiß leider nicht weiter. Danke
 
Hallo,

irgendwo hast du dich verzettelt :)

wo ist denn in deinem Manifest deine Klasse AlarmManagerBroadcastReceiver ???

Die wird niemals verwendet , wenn du sie auch nicht da setzt ..

<receiver
android:name=".AlarmManagerBroadcastReceiver">
.
.

</receiver>

P.S vielleicht solltest du mal auch zur Probe deine Triggerzeit verkürzen.
(Oder willst du immer 60000ms warten , bis was passiert ?)
 
swa00 schrieb:
Hallo,

irgendwo hast du dich verzettelt :)

wo ist denn in deinem Manifest deine Klasse AlarmManagerBroadcastReceiver ???

Die wird niemals verwendet , wenn du sie auch nicht da setzt ..

<receiver
android:name=".AlarmManagerBroadcastReceiver">
.
.

</receiver>

P.S vielleicht solltest du mal auch zur Probe deine Triggerzeit verkürzen.
(Oder willst du immer 60000ms warten , bis was passiert ?)

Also muss ich beide in die Manifest schreiben ? Die Klasse1 und AlarmManagerBrodcastReceiver ? Die Zeit auf weniger als 60000 geht ja nicht seit Android 5.1. Das sagt mir auch AndroidStudio
 
Ich fasse noch mal die Aussage von @swa00 zusammen.

Als Receiver im Manifest sollte nicht die Klasse Klasse1 eingetragen werden, sonderen der Receiver AlarmManagerBroadcastReceiver.
 
  • Danke
Reaktionen: swa00
Ich danke Dir "Markus" :)
Manchmal komme ich vielleicht nicht zielgerecht zum Punkt :)
 
Ahh ok lieben Dank, dann ist also alles richtig und es geht trotzdem nicht :) also diese Android Programmierung ist echt komisch.

Eine kurze Frage noch mal rein Theoretisch wo dran könnte es liegen das ein Code bis Android 5.0 geht und ab 5.1 nicht mehr obwohl kein Fehler angezeigt wird ?

nochmal vielen Dank jetzt weiß ich das der Fehler wo anders sein muss.
 
Diese frage übersteigt natürlich die Kapazität unserer Kristallkugel :)

Was geht denn nicht ? WO , WANN, WESHALB ???
Dein Broadcast ???
 
Also damit ich nicht so lange erklären muss ich hatte hier vor einiger Zeit mal ein Thema dazu wenn du/ihr mögt könnt ihr ja mal euer Glück versuchen :)

Hier der Link RemoteViews aktualisieren sich nicht trotz AlarmManager.

PS :Ich sehe gerade @swa00 du hast schon versucht mir bei dem früheren Thema zu helfen.
 
markus.tullius schrieb:
Ah, deshalb kam mir das Thema so bekannt vor.
Die Antwort auf das frühere Thema ist ganz einfach, der Code von Android verändert sich bei jeden Versionssprung. Da kann es schon mal vorkommen, das die Funktionsweise sich ändert. Steht alles im Thread zum Thema. :)

Vielleicht hilft dir die Doku zu dem Thema:
App Widgets | Android Developers

Oder folgendes Beispiele:
Android: complete widget tutorial (including source code)
How to code a simple Android widget



Ja das habe ich alles schon durch, deswegen wende ich mich ja an euch, ich weiß einfach nicht weiter. :(
 
Hallo Corey,

und nimm es mir an dieser Stelle bitte nicht übel -

wenn ich mir die Verläufe anschaue, dann habe ich die Vermutung,
dass du schon sehr strukturiert und wissbegierig vorgehst , allerdings
dir eine Menge Grundlagen fehlen .

Woran ich das festmache :

So einige Basic-Sachen sind dir noch nicht geläufig.

Ich versuche es mal an einem Beispiel :

Du weisst zwar wie eine Mauer aussieht, weisst auch , das man Zement braucht, wusstest aber nicht,
dass man den Zement vorher mit wasser & Sand anmischt.
Gleichzeitig gehst du aber schon hin ( weil die Mauer hält ja schon ein wenig ) und setzt den Dachstuhl drauf.
Jetzt wunderst du dich , dass das Ding wackelt und versuchst nachträglich Wasser in die Fugen zu schmieren -

Und das geht nicht ...

Wenn ich eine Technik erlernen möchte , baue ich mir immer ein eigenes Projekt dafür und
konzentriere mich NUR darauf

Ergo in deinem Falle den Receiver - und wenn ich das mit allen Teilen gemacht habe,
dann kommt das Final Projekt und ich füge es zusammen - dann weis man wenigstens , wo man suchen muss.

Ich lege dir also ans Herz :
Fange von vorne so an und hangel dich Stück für stück nach oben.

Nochmal : Bitte nicht übel nehmen , aber so kommt der gesamte Verlauf halt bei mir an
und der Tip ist kein Angriff - weis Gott nicht - sondern ein lieb gemeinter Tip :)
 
swa00 schrieb:
Hallo Corey,

und nimm es mir an dieser Stelle bitte nicht übel -

wenn ich mir die Verläufe anschaue, dann habe ich die Vermutung,
dass du schon sehr strukturiert und wissbegierig vorgehst , allerdings
dir eine Menge Grundlagen fehlen .

Woran ich das festmache :

So einige Basic-Sachen sind dir noch nicht geläufig.

Ich versuche es mal an einem Beispiel :

Du weisst zwar wie eine Mauer aussieht, weisst auch , das man Zement braucht, wusstest aber nicht,
dass man den Zement vorher mit wasser & Sand anmischt.
Gleichzeitig gehst du aber schon hin ( weil die Mauer hält ja schon ein wenig ) und setzt den Dachstuhl drauf.
Jetzt wunderst du dich , dass das Ding wackelt und versuchst nachträglich Wasser in die Fugen zu schmieren -

Und das geht nicht ...

Wenn ich eine Technik erlernen möchte , baue ich mir immer ein eigenes Projekt dafür und
konzentriere mich NUR darauf

Ergo in deinem Falle den Receiver - und wenn ich das mit allen Teilen gemacht habe,
dann kommt das Final Projekt und ich füge es zusammen - dann weis man wenigstens , wo man suchen muss.

Ich lege dir also ans Herz :
Fange von vorne so an und hangel dich Stück für stück nach oben.

Nochmal : Bitte nicht übel nehmen , aber so kommt der gesamte Verlauf halt bei mir an
und der Tip ist kein Angriff - weis Gott nicht - sondern ein lieb gemeinter Tip :)


Danke für diesen kurzen Tipp :) genau so wie du es geschrieben hast, habe ich ja gemacht. Deswegen hat das Widget ja auch geklappt, nur geht es in diesem Fall nicht.

Aber Danke trotzdem für den guten Rat.
 

Ähnliche Themen

M
Antworten
2
Aufrufe
631
Mozart40
M
wernho
Antworten
11
Aufrufe
693
wernho
wernho
A
Antworten
1
Aufrufe
584
swa00
swa00
Zurück
Oben Unten