2013-09-05 11 views
7

Próbuję ustawić alarm w określonym czasie, ale nie zostanie złapany w moim reciver.Android alarmManager setNageating not triggering

Setup:

Intent intent = new Intent(this, ActionReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

Calendar current = Calendar.getInstance(); 
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, (current.getTimeInMillis() + 60000),3600000, pendingIntent); 

Oto moja reciver:

public class ActionReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Bundle bundle = intent.getExtras(); //breakpoint here that doesn't get triggered 
    } 
} 

Włożyłem te wartości w swoim manifeście:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<receiver android:name="com.project.ActionReceiver" android:enabled="true" /> 

Nie wiem co jest nie tak ... dzięki !

+0

Jeżeli odbiornik nie będzie 'ActionReceiver' – kabuto178

Odpowiedz

1

Nazwa odbiornika w oczywisty powinien być nazwą klasy, takie jak:

<receiver android:name="com.project.ActionReceiver"> 

BTW, ustawić działanie jest lepsze praktyki.

Intent intent = new Intent(this, ActionReceiver.class); 
intent.setAction("com.project.action.ALERM"); 

A w oczywisty

<receiver android:name="com.project.ActionReceiver"> 
    <intent-filter> 
     <action android:name="com.project.action.ALERM"/> 
    </intent-filter> 
</receiver> 
+0

Dzięki William.That works.Though AndroidManifest.xml ostrzega, że:' Eksportowane odbiornik nie wymaga zezwolenia " – Anirudha

0

Spróbuj zmienić atrybut swojej receiverandroid:name na pełną nazwę klasy swojej ActionReceiver. Coś takiego:

<receiver android:name="com.project.ActionReceiver" android:enabled="true" /> 
+0

Zmieniono. Nadal jednak nie wyzwala odbiornika. –

4

Wreszcie odbiornik wystrzelił! I dodaje następujący kod do mojego manifestu:

<receiver 
     android:name="com.project.ActionReceiver" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="com.project.ActionSetter" > 
      </action> 
     </intent-filter> 
    </receiver> 

znaleźć tutaj ze szczegółami: https://stackoverflow.com/a/16119351/1174574

+0

Potrzebujesz 'android: exported =" true "' LUB ''. Nie oba. Nie miałeś ani jednego, dlatego nie działał. '' musi być dostępny dla aplikacji spoza aplikacji (na przykład 'AlarmManager'). aby to zrobić, możesz ustawić 'android: exported =" true "' LUB dodać ''. Jeśli dodasz '', zakłada się, że '' musi zostać wyeksportowany, więc domyślna wartość 'export' jest ustawiona na' true' w obecności '' . –

Powiązane problemy