2017-09-12 21 views
-1

我有一個android應用程序,我有一個從未被調用的接收器WakefulBroadcastReceiver安卓接收器不被稱爲

我在AlaramReceiver.java上放了一個斷點,從未涉足過。 我檢查了大小寫以及它是如何拼寫接收者類的名稱。

我將添加我的清單和java類鏈接。

感謝您的幫助。

清單:

<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; 
    } 
} 

我的清單:

<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

您確定您的鬧鐘有正確的時間和類型嗎?清單中的''元素在哪裏?它需要位於''標籤之間,但不包含在其他任何其他標籤中,如「」或「」。 –

+0

感謝您的評論。我查了一下,似乎沒有問題。 – lcros

回答

0

調用它在我PlanifyAlarmHandler

我有:

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

而不是

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

現在它的工作。 感謝您的所有答案。

1

您還沒有指定在清單中的接收器的意圖過濾器。如果沒有意圖過濾器,它不知道何時觸發或以其他方式,你需要明確地調用它

<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> 

否則你必須明確地

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

你試過這個@lcros嗎? –

+0

我用CONNECTIVITY_CHANGE行添加intent-filter。對於意圖操作,它已經通過代碼完成了。但仍然沒有工作。 – lcros

+0

我將我的初始manifest.xml添加到這篇文章 – lcros