mithilfe von application service in einer anderen Anwendung
Ich habe ein android-Anwendung, die einen Dienst enthält. Jetzt möchte ich den Zugriff auf dieses service in einer anderen Anwendung. Wie kann ich das tun? Ich fand diese Anwendung über Netz. finden Sie code-Schnipsel Balg
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;
}
}
- und manifest-Datei ist wie folgt
<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>
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden müssen, ein Vorsatz-filter für service, sagen 'LocalWordService" wir erklären
in der aufrufenden app, wir müssen Sie nur fügen Sie die Zeile für die erste service -
das ist es.
Benötigen Sie, um Ihren service öffentlich verfügbar, so dass eine andere Anwendung kann zu binden. Das zu tun, fügen Sie
den manifest-Eintrag für den Dienst, den Sie freigeben möchten.
Brauchen Sie nicht zu setzen, dass der service in einem eigenen Prozess, so dass Sie können entfernen Sie die
es sei denn, Sie wollen das aus anderen Gründen.
Sind Sie wollen, um eine bestimmte Methode in der Klasse b aus Klasse a? Wenn ja, legen Sie Ihre Initialisierung der Klasse mit Ihrem Variablen auf die Spitze der Klasse. DANN, in Ihrer OnCreate () - Methode, starten Sie ein neues Objekt der Klasse.
EX:
//Initialisierung der Klasse a
Privaten mA;