2015-06-06 3 views
0

Я новичок в android и создаю сервис в одном из моих напоминаний. но я моя служба запускается, когда я вызываю startService() в моем методе onCreate() моей деятельности. Я не могу видеть тосты, которые используются в разных методах моего класса обслуживания. Как новичок в android не смог выяснить проблему , MainActivity:Невозможно создать услугу

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_activity_show_reminders); 
     isReminders = false; 
     dataSrc = new RemitDataSrc(this); 
     dataSrc.open(); 

     rem = dataSrc.findALL(); 
     refreshDisplay(); 
    } 
    private void refreshDisplay(){ 
     if(isMyServiceRunning(GeofencingService.class)){ 
      Intent intent = new Intent(this, GeofencingService.class); 
      stopService(intent); 
      Toast.makeText(this, "yes service", Toast.LENGTH_LONG).show(); 
     }else{ 
     Toast.makeText(this, "No service", Toast.LENGTH_LONG).show(); 
     } 
     if(rem.size()==0){ 

      Toast.makeText(this, "No Reminders in Database", Toast.LENGTH_LONG).show(); 
     } 


     Intent intent = new Intent(this, GeofencingService.class); 
     startService(intent); 
      ArrayAdapter<Reminders> remAdpt = new RemindersListAdapter(this, rem); 
      setListAdapter(remAdpt); 


    } 
    private boolean isMyServiceRunning(Class<?> serviceClass) { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (serviceClass.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

GeofencingService:

public class GeofencingService extends Service{ 
    RemitDataSrc dataSrc; 
    /** 
    * Geofence Store 
    */ 
    private GeofenceStore mGeofenceStore; 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    @Override 
    public void onCreate() { 

     super.onCreate(); 
     Toast.makeText(this, "GeoFencing Service created", Toast.LENGTH_LONG).show(); 
     dataSrc = new RemitDataSrc(this); 
     dataSrc.open(); 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(this, "GeoFencing Service Started", Toast.LENGTH_LONG).show(); 
     serviceTest sT= new serviceTest(); 
     dataSrc.open(); 

     return super.onStartCommand(intent, flags, startId); 
    } 
    @Override 
    public void onDestroy() { 

     super.onDestroy(); 
     Toast.makeText(this, "GeoFencing Service Stoped", Toast.LENGTH_LONG).show(); 
     dataSrc.close(); 
    } 

} 

manifest.xml:

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".SetReminderActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
     </activity> 

     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="AIzaSyD5GMap3cZBiMYWEiK0WX-2whx0xuqBwW4" /> 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

     <activity 
      android:name=".AddReminderActivity" 
      android:label="@string/title_activity_add_reminder" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".ActivityShowReminders" 
      android:label="@string/title_activity_activity_show_reminders" > 
     </activity> 
     <activity 
      android:name=".RemindersDetailActivity" 
      android:label="Reminder Details" > 
     </activity> 
     <service 
      android:name=".LocationCheckerService" 
      > 

     </service> 
     <service 
      android:name=".GeofencingService" 
      android:exported="false" 
      > 

     </service> 
    </application> 
+0

Ну, первое, что нужно сделать, когда что-то не работает на Android, чтобы проверить [* LogCat *] (https://developer.android.com/tools/help/logcat.html) для сообщений об ошибках. Также: Является ли служба объявленной в вашем манифесте? Вы не проверяете возвращаемое значение из 'startService()', так как вы уверены, ваша служба действительно найдена? – dhke

+0

это то, что я использую в файле манифеста '<службы андроид:« GeofencingService»имя = андроида: экспортироваться =„ложь“ > ' – user2591221

+0

Пожалуйста, измените свой вопрос и добавить все соответствующие части манифеста. Точка указывает относительное имя. Правильно ли указано имя пакета? Попробуйте вместо этого использовать имя канонического класса вашей службы и посмотрите, работает ли это. Но самое главное: проверьте свои звонки на наличие ошибок (в настоящее время вы этого не делаете). – dhke

ответ

2

Как вы уже упоминали в одном из одного из ваших комментариев, что имя пакета услуг отличается от пакета, содержащего деятельности, использовать полное имя класса в манифесте с именем пакета.

<service 
android:name="com.afifa.projectreminder.service.GeofencingService" android:exported="false" 
> 
</service> 
+0

y ou спас мой день спасибо :) – user2591221

+1

Или, если пакет приложений 'foo.bar', а ваш компонент' foo.bar.baz.Component', вы можете просто поместить '.baz.Component'. –

0

Пожалуйста, зарегистрируйтесь службу манифесте как дети вашего приложения, как:

<application ..> 
.. 
    <service 
      android:name=".GeofencingService" 
      android:enabled="true"> 
    </service> 
</application> 
+0

Его уже сделано '<служба андроид: имя =". GeofencingService» андроид: экспортироваться = "ложь" > ' – user2591221

+0

add android: enabled =" true " –

+1

Я думаю, что по умолчанию его истинный http://developer.android.com/guide/topics/manifest/service-element.html – user2591221

0

Указать службу в манифесте вашего проекта под тегом приложения. как так

<service android:name=".ServiceName" /> 
Смежные вопросы