2017-09-12 2 views
-1

J'ai une application android et j'ai un récepteur de WakefulBroadcastReceiver qui n'est jamais appelé.récepteur android ne s'appelle pas

J'ai mis un point d'arrêt sur le AlaramReceiver.java et je n'y suis jamais entré. J'ai vérifié le cas et comment il orthographiait le nom de classe de récepteur.

Je vais ajouter mon manifeste et les classes java liées.

Merci pour votre aide.

manifeste:

<receiver android:name="fr.cls.mobility.myclsdroiddata.service.android.OnAlarmReceiver_"> 

AlarmReceiver_.class:

public final class OnAlarmReceiver_ 
    extends OnAlarmReceiver 
{ 


} 

AlamarReceiver.java:

@EReceiver 
public class OnAlarmReceiver extends WakefulBroadcastReceiver { 

    private static final String LOG_MESSAGE_ON_RECEIVE = "startWakefulService with context and DataDownloadIntentServiceFactory.getIntentAlarmReceived"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(OnAlarmReceiver.class.getSimpleName(), LOG_MESSAGE_ON_RECEIVE); 
     startWakefulService(context, DataDownloadIntentServiceFactory.getIntentAlarmReceived(context, null)); 
    } 

} 

DataDownloadIntentServiceFactory.java:

package fr.cls.mobility.myclsdroiddata.service.android; 

import com.effitic.delegates.Action; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Parcelable; 
import android.os.ResultReceiver; 

/** 
* Cette classe crée les différents services Android de mise à jour des positions. <br> 
* <br> 
* Copyright : Copyright (c) 2013 <br> 
* <br> 
* Société : CLS (Collecte Localisation Satellites) 
* 
* @author Effitic 
* @version Revision: 1.1.0.02 - Date: 2014-01-15 
*/ 
public final class DataDownloadIntentServiceFactory { 

    /** 
    * Constructeur. 
    */ 
    private DataDownloadIntentServiceFactory() { 
     super(); 
    } 

    public static Intent getIntentNetworkStateChanged(Context context, boolean networkAvailable) { 
     Intent dataDownloadIntentService = createIntent(context, null, DataDownloadIntentService.NETWORK_STATE_CHANGED); 
     dataDownloadIntentService.putExtra(DataDownloadIntentService.NETWORK_STATE_CHANGED, networkAvailable); 
     return dataDownloadIntentService; 
    } 

    private static Intent createIntent(Context context, ResultReceiver resultReceiver, String type) { 
     Intent dataDownloadIntentService = DataDownloadIntentService_.intent(context).get(); 
     dataDownloadIntentService.putExtra(DataDownloadIntentService.TYPE, type); 
     dataDownloadIntentService.putExtra(DataDownloadIntentService.RESULT_RECEIVER, resultReceiver); 
     return dataDownloadIntentService; 
    } 

    public static Intent getIntentAlarmReceived(Context context, final Action<Object> refreshFinishedHandler) { 
     ResultReceiver resultReceiver = new ResultReceiver(null) { 
      @Override 
      protected void onReceiveResult(int resultCode, android.os.Bundle resultData) { 
       if (refreshFinishedHandler != null) { 
        refreshFinishedHandler.execute(null); 
       } 
      }; 
     }; 

     Intent dataDownloadIntentService = createIntent(context, resultReceiver, DataDownloadIntentService.ALARM_RECEIVED); 
     return dataDownloadIntentService; 
    } 

    public static Intent getIntentRefresh(Context context, final Action<Object> refreshFinishedHandler) { 
     ResultReceiver resultReceiver = new ResultReceiver(null) { 
      @Override 
      protected void onReceiveResult(int resultCode, android.os.Bundle resultData) { 
       if (refreshFinishedHandler != null) { 
        refreshFinishedHandler.execute(null); 
       } 
      }; 
     }; 
     Intent dataDownloadIntentService = createIntent(context, resultReceiver, DataDownloadIntentService.REFRESH); 
     return dataDownloadIntentService; 
    } 

    public static Intent getIntentBootCompleteReceived(Context context) { 
     Intent dataDownloadIntentService = createIntent(context, null, DataDownloadIntentService.BOOT_COMPLETE_RECEIVED); 
     return dataDownloadIntentService; 
    } 

    public static <T extends ResultReceiver> T getResultReceiverFromIntent(Intent intent, Class<T> clazz) { 
     Parcelable o = intent.getParcelableExtra(DataDownloadIntentService.RESULT_RECEIVER); 
     if (clazz.isInstance(o)) { 
      return clazz.cast(o); 
     } 
     return null; 
    } 
} 

mon manifeste:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:versionCode="51" android:versionName="1.3.01-SNAPSHOT" package="fr.cls.mobility.myclsdroiddata"> 

    <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14"/> 
    <!-- permissions --> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <!-- pour le stockages des tuiles de carto --> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <application android:allowBackup="false" android:debuggable="true" android:icon="@drawable/notif" android:label="@string/app_name" android:name="fr.cls.mobility.myclsdroiddata.view.application.CLSApplication_" android:theme="@style/AppTheme2"> 
     <activity android:configChanges="keyboardHidden|orientation|screenSize" android:hardwareAccelerated="false" android:label="@string/app_name" android:launchMode="singleTop" android:name="fr.cls.mobility.myclsdroiddata.view.activity.MapViewActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 
     <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="fr.cls.mobility.myclsdroiddata.view.activity.PanelFragmentActivity" android:windowSoftInputMode="stateHidden"/> 
     <service android:name="fr.cls.mobility.myclsdroiddata.service.android.DataDownloadIntentService_"/> 
     <receiver android:name="fr.cls.mobility.myclsdroiddata.service.android.OnBootReceiver_"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="fr.cls.mobility.myclsdroiddata.service.android.OnNetworkStateChangedReceiver_"> 
      <intent-filter> 
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
       <action android:name="android.net.wifi.STATE_CHANGE"/> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="fr.cls.mobility.myclsdroiddata.service.android.OnAlarmReceiver_"/> 


    </application> 

</manifest> 
+0

Où se trouve l'élément '' dans le manifeste? Il doit être entre les balises '', mais pas dans les autres, comme' 'ou' '. –

+0

Merci pour votre commentaire. J'ai vérifié et ça semble aller. – lcros

Répondre

0

Dans mon PlanifyAlarmHandler

J'ai eu:

Intent alarmIntent = new Intent(); 
alarmIntent.setClassName("fr.cls.mobility.service.android", "OnAlarmReceiver_"); 

au lieu de

Intent alarmIntent = new Intent(context, OnAlarmReceiver_.class); 

Maintenant, ça fonctionne. Merci pour toutes vos réponses. Etes-vous sûr d'avoir l'heure et le type corrects pour votre alarme?

1

Vous n'avez pas spécifié le filtre intention pour le récepteur dans le manifeste. Sans le filtre intention, il ne sait pas quand déclencher ou autrement vous devez l'appeler explicitement

<receiver android:name="fr.cls.mobility.myclsdroiddata.service.android.OnAlarmReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.YOUR_INTENT_ACTION" /> 
     <!--If you want to watch network connectivity state--> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

sinon vous devez l'appeler explicitement

Intent intent = new Intent(getApplicationContext(), fr.cls.mobility.myclsdroiddata.service.android.OnAlarmReceiver.class); 
sendBroadcast(intent);` 
+0

as-tu essayé ce @lcros? –

+0

J'ajoute le filtre d'intention avec la ligne CONNECTIVITY_CHANGE. Pour l'action d'intention, c'est déjà fait par le code. Mais ne fonctionne toujours pas. – lcros

+0

J'ajoute mon fichier manifest.xml initial à ce post – lcros