2016-12-14 29 views
0

你好,我想按照这个:https://technology.jana.com/2014/10/28/periodic-background-tasks-in-android/不是一个Activity子类或别名

但由于某种原因,我得到: 错误运行的应用程序:services.BackgroundService不是一个Activity子类或别名

新到Android ...

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.mycompany.app"> 

<application 
    android:name=".Virgo"> 

    <receiver android:name="receivers.SyncReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BATTERY_LOW" /> 
      <action android:name="android.intent.action.BATTERY_OKAY" /> 
      <action android:name="com.mycompany.app.SYNC_TASK_HEART_BEAT" /> 
     </intent-filter> 
    </receiver> 

    <receiver android:name="receivers.BootAndUpdateReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

    <service android:name="services.BackgroundService" /> 

</application> 

这是我的服务代码的要求:

public class SyncReceiver extends BroadcastReceiver{ 
    private static final String TAG = "SyncReceiver"; 
    private static final String INTENT_ACTION = "com.rhotechnology.app.SYNC_TASK_HEART_BEAT"; 

    @Override 
public void onReceive(Context context, Intent intent) { 
     if ((intent.getAction() !=null)) { 

      Virgo virgo = (Virgo) context.getApplicationContext(); 
      SharedPreferences sharedPreferences = virgo.getSharedPreferences ("syncPreferences", android.content.Context.MODE_PRIVATE); 
      if (intent.getAction().equals("android.intent.action.BATTERY_LOW")) { 
       sharedPreferences.edit().putBoolean(Constants.BACKGROUND_SERVICE_BATTERY_CONTROL, false).apply(); 
       stopSyncReceiverHeartBeat(context); 
      } else if (intent.getAction().equals("android.intent.action.BATTERY_OKAY")) { 
       sharedPreferences.edit().putBoolean(Constants.BACKGROUND_SERVICE_BATTERY_CONTROL, true).apply(); 
       restartSyncReceiverHeartBeat(context, virgo); 
      } else if (intent.getAction().equals(INTENT_ACTION)) { 
       onSync(context, virgo); 
      } 

     } 

    } 

public void onSync(Context context, Virgo virgo){ 
    Log.v(TAG,"Syncing"); 
} 

public void restartSyncReceiverHeartBeat(Context context, Virgo virgo) { 
    SharedPreferences sharedPreferences = virgo.getSharedPreferences ("syncPreferences", MODE_PRIVATE); 
    boolean isBatteryOk = sharedPreferences.getBoolean(Constants.BACKGROUND_SERVICE_BATTERY_CONTROL, true); 
    Intent alarmIntent = new Intent(context, Virgo.class); 
    boolean isAlarmUp = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_NO_CREATE) != null; 

    if (isBatteryOk && !isAlarmUp) { 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmIntent.setAction(INTENT_ACTION); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent); 
    } 
} 

public void stopSyncReceiverHeartBeat(Context context) { 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent alarmIntent = new Intent(context, Virgo.class); 
    alarmIntent.setAction(INTENT_ACTION); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); 
    alarmManager.cancel(pendingIntent); 
} 

}

+0

加入你的服务代码或logcat –

+0

它编译好!但不发送到Android我猜,这是否有道理? – Zulander

回答

1

的配置是错误的运行/调试配置>启动,有它在那里,不匹配清单的活动!

相关问题