在Android中启动服务并通过多个活动与其进行通信

时间:2014-03-22 09:50:10

标签: android service

好吧,我想通过多个活动与服务进行沟通,就像每个人都收听广播频道并更新他们的Twitter状态一样。

我最近的努力是在每个活动上使用广播接收器来接收从服务发送的广播。但我想知道这是一个好方法,物业方式是什么?

此外,我想问一下我是否应该使用Binder来启动这种服务或使用startService方法(我实际上是使用Service的初学者。)。

提前致谢。

1 个答案:

答案 0 :(得分:0)

        OKay you are a beginner in Service means Refer this below Link 

http://developer.android.com/guide/components/services.html

        in your Question while you using service you must register in Manifest file..
        like this..

        for example i did unlock screen using service and broadcast receiver.

        <service
                    android:name="com.services.Unlock_Service"
                    android:enabled="true"
                    android:icon="@drawable/ic_launcher" >
                </service>

        unlockservice.java



        package com.services;

        import java.util.List;

        import android.annotation.SuppressLint;
        import android.app.Activity;
        import android.app.ActivityManager;
        import android.app.KeyguardManager;
        import android.app.Service;
        import android.app.KeyguardManager.KeyguardLock;
        import android.content.BroadcastReceiver;
        import android.content.ComponentName;
        import android.content.Context;
        import android.content.Intent;
        import android.content.IntentFilter;
        import android.os.IBinder;
        import android.os.PowerManager;
        import android.os.PowerManager.WakeLock;
        import android.util.Log;
        import android.widget.Toast;

        @SuppressWarnings("deprecation")
        public class Unlock_Service extends Service {
            ScreenBroadcastReceiver m_receiver;
            public String activityname;
            PowerManager pm;
            WakeLock wl;

            @Override
            public void onCreate() {
                IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
                filter.addAction(Intent.ACTION_SCREEN_OFF);
                m_receiver = new ScreenBroadcastReceiver();
                registerReceiver(m_receiver, filter);
                Log.d("Widgettool", "works");
            }

            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                start();
                Toast.makeText(getBaseContext(), "SERVICE ON", Toast.LENGTH_SHORT)
                        .show();

                return START_STICKY;
            }

            @Override
            public void onDestroy() {
                stop();
                unregisterReceiver(m_receiver);
            }

            @SuppressLint("Wakelock")
            public void start() {
                try {

                    pm = (PowerManager) getSystemService(POWER_SERVICE);
                    wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
                            | PowerManager.ACQUIRE_CAUSES_WAKEUP, ".SensorActivity");
                    wl.acquire();
                    KeyguardManager mgr = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
                    KeyguardLock lock = mgr.newKeyguardLock(KEYGUARD_SERVICE);
                    lock.disableKeyguard();
                    // new TabActivityPacs().service();
                } catch (Exception e) {

                }

            }

            public void stop() {

                ActivityManager am = (ActivityManager) this
                        .getSystemService(ACTIVITY_SERVICE);
                List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
                Log.d("topActivity", "CURRENT Activity ::"
                        + taskInfo.get(0).topActivity.getClassName());
                activityname = taskInfo.get(0).topActivity.getClassName();
                ComponentName componentInfo = taskInfo.get(0).topActivity;
                componentInfo.getPackageName();

            }

            private class ScreenBroadcastReceiver extends BroadcastReceiver {

                @Override
                public void onReceive(Context context, Intent intent) {
                    if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                        Log.d("ON SCREEN ON", "might hang here");
                        // start();
                        stop();

                    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                        start();
                        Log.d("SCREEN OFF", "might hang here");
                    }
                }

            }

            @Override
            public IBinder onBind(Intent intent) {

                return null;
            }

        }


    in your question... you have to use broadcast receiver in all activity then only you receive your corresponding information using service..