在另一个应用程序中使用应用程序服务

在另一个应用程序中使用应用程序服务

本文介绍了在另一个应用程序中使用应用程序服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含服务的 android 应用程序.现在我想在另一个应用程序中访问该服务.我怎样才能做到这一点?我通过网络找到了这个应用程序.请在下面找到代码片段

I have an android application which contains a service. Now I want to access that service in another application. How can I do that? I found this application over net. please find code snippets bellow

1>
public class LocalWordService extends Service {

    private final IBinder mBinder = new MyBinder();
    private ArrayList<String> list = new ArrayList<String>();

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Random random = new Random();
        if (random.nextBoolean()) {
            list.add("Linux");
        }
        if (random.nextBoolean()) {
            list.add("Android");
        }
        if (random.nextBoolean()) {
            list.add("iPhone");
        }
        if (random.nextBoolean()) {
            list.add("Windows7");
        }
        if (list.size() >= 20) {
            list.remove(0);
        }
        return Service.START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return mBinder;
    }

    public class MyBinder extends Binder {
        LocalWordService getService() {
            return LocalWordService.this;
        }
    }

    public List<String> getWordList() {
        return list;
    }

}


2>

public class MyScheduleReceiver extends BroadcastReceiver {


    // Restart service every 30 seconds
        private static final long REPEAT_TIME = 1000 * 30;

        @Override
        public void onReceive(Context context, Intent intent) {
            AlarmManager service = (AlarmManager) context
                    .getSystemService(Context.ALARM_SERVICE);
            Intent i = new Intent(context, MyStartServiceReceiver.class);
            PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,
                    PendingIntent.FLAG_CANCEL_CURRENT);
            Calendar cal = Calendar.getInstance();
            // Start 30 seconds after boot completed
            cal.add(Calendar.SECOND, 30);
            //
            // Fetch every 30 seconds
            // InexactRepeating allows Android to optimize the energy consumption
            service.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                    cal.getTimeInMillis(), REPEAT_TIME, pending);

            // service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            // REPEAT_TIME, pending);

        }

}

3>
public class MyStartServiceReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, LocalWordService.class);
        context.startService(service);
    }

}

4>
public class MyService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();
    }

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

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

}

和清单文件如下

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="de.vogella.android.ownservice.local.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service
            android:name="de.vogella.android.ownservice.local.LocalWordService"
            android:icon="@drawable/ic_launcher"
            android:label="@string/service_name" >
        </service>

         <service
            android:name="de.vogella.android.ownservice.local.MyService"
            android:process=":meinprocess"
            android:icon="@drawable/ic_launcher"
            android:label="@string/service_name" >
        </service>

        <receiver android:name="de.vogella.android.ownservice.local.MyScheduleReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver android:name="de.vogella.android.ownservice.local.MyStartServiceReceiver" >
        </receiver>
    </application>

推荐答案

需要对服务使用意图过滤器,比如我们声明的'LocalWordService'

need to use an intent filter for service, say for 'LocalWordService' we declare

<service
                    android:enabled="true"
                    android:exported="true"
                    android:name="de.vogella.android.ownservice.local.MyService">
        <intent-filter>
            <action android:name="de.vogella.android.ownservice.local.START_SERVICE" />
        </intent-filter>
        </service>

在调用应用程序时,我们只需要添加获取服务的行

in calling app, we just need to add the line for getting service

Intent intent=new Intent("de.vogella.android.ownservice.local.START_SERVICE");
                startService(intent);

就是这样.

这篇关于在另一个应用程序中使用应用程序服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 09:37