Start service in Android

前端 未结 5 1489
醉梦人生
醉梦人生 2020-11-27 14:07

I want to call a service when a certain activity starts. So, here\'s the Service class:

public class UpdaterServiceManager extends Service {

    private fin         


        
相关标签:
5条回答
  • 2020-11-27 14:12

    I like to make it more dynamic

    Class<?> serviceMonitor = MyService.class; 
    
    
    private void startMyService() { context.startService(new Intent(context, serviceMonitor)); }
    private void stopMyService()  { context.stopService(new Intent(context, serviceMonitor));  }
    

    do not forget the Manifest

    <service android:enabled="true" android:name=".MyService.class" />
    
    0 讨论(0)
  • 2020-11-27 14:19

    Probably you don't have the service in your manifest, or it does not have an <intent-filter> that matches your action. Examining LogCat (via adb logcat, DDMS, or the DDMS perspective in Eclipse) should turn up some warnings that may help.

    More likely, you should start the service via:

    startService(new Intent(this, UpdaterServiceManager.class));
    
    0 讨论(0)
  • 2020-11-27 14:21
    startService(new Intent(this, MyService.class));
    

    Just writing this line was not sufficient for me. Service still did not work. Everything had worked only after registering service at manifest

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
    
        ...
    
        <service
            android:name=".MyService"
            android:label="My Service" >
        </service>
    </application>
    
    0 讨论(0)
  • 2020-11-27 14:26

    Java code for start service:

    Start service from Activity:

    startService(new Intent(MyActivity.this, MyService.class));
    

    Start service from Fragment:

    getActivity().startService(new Intent(getActivity(), MyService.class));
    

    MyService.java:

    import android.app.Service;
    import android.content.Intent;
    import android.os.Handler;
    import android.os.IBinder;
    import android.util.Log;
    
    public class MyService extends Service {
    
        private static String TAG = "MyService";
        private Handler handler;
        private Runnable runnable;
        private final int runTime = 5000;
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.i(TAG, "onCreate");
    
            handler = new Handler();
            runnable = new Runnable() {
                @Override
                public void run() {
    
                    handler.postDelayed(runnable, runTime);
                }
            };
            handler.post(runnable);
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onDestroy() {
            if (handler != null) {
                handler.removeCallbacks(runnable);
            }
            super.onDestroy();
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            return START_STICKY;
        }
    
        @SuppressWarnings("deprecation")
        @Override
        public void onStart(Intent intent, int startId) {
            super.onStart(intent, startId);
            Log.i(TAG, "onStart");
        }
    
    }
    

    Define this Service into Project's Manifest File:

    Add below tag in Manifest file:

    <service android:enabled="true" android:name="com.my.packagename.MyService" />
    

    Done

    0 讨论(0)
  • 2020-11-27 14:26
    Intent serviceIntent = new Intent(this,YourActivity.class);
    
    startService(serviceIntent);
    

    add service in manifist

    <service android:enabled="true" android:name="YourActivity.class" />
    

    for running service on oreo and greater devices use for ground service and show notification to user

    or use geofencing service for location update in background reference http://stackoverflow.com/questions/tagged/google-play-services

    0 讨论(0)
提交回复
热议问题