在另一个应用程序中使用应用程序服务
我有一个包含服务的Android应用程序。现在我想在另一个应用程序中访问该服务。我怎样才能做到这一点?我发现这个应用程序通过网络。请找代码片段波纹管在另一个应用程序中使用应用程序服务
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>
你想从一个类B类用一定的方法?如果是这样,请将类的初始化与变量放在类的顶部。那么,在你的OnCreate()方法中,启动该类的新对象。
EX: // class a initialization Private a mA;
public void OnCreate(Bundle savedInstanceState)
{
super.OnCreate(savedInstanceState);
setContentView(R.layout.main);
//Other code
mA = new a();
}
您需要公开您的服务,以便其他应用程序可以绑定到它。为此,请将
android:export="true"
添加到要共享的服务的清单条目中。
你并不需要把该服务在一个单独的进程,这样你就可以删除
android:process=":meinprocess"
,除非你想这样做,因为其他原因。
需要使用一个意图过滤服务,说为“LocalWordService”我们在调用应用程序申报
<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>
,我们只需要添加的行获取服务
Intent intent=new Intent("de.vogella.android.ownservice.local.START_SERVICE");
startService(intent);
就是这样。
花了几个小时后,我解决了我的任务,感谢您的代码。 – 2015-01-12 16:13:59
我这样做,我得到一个异常,说意图需要明确声明 – Libathos 2016-12-05 12:48:27
不,不。我想创建另一个应用程序,如'AnotherApp',并且我想在'AnotherApp'中使用de.vogella.android.ownservice.local.MyService,如果您看到我所说的清单持有android:process =“:meinprocess”,如果我删除':'那么该服务将是一个类似的全球服务。那么如何在AnotherApp应用程序中使用'MyService'? – 2013-05-02 11:37:07
您是否尝试过将'MyService'作为库添加到您要使用它的项目中?查看Android开发者链接了解详情,然后回到我的面前,让我知道它是否有效! http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject – 2013-05-02 11:44:36