我只是想從我的活動中調用本地服務的方法。我怎樣才能做到這一點 ?如何從活動中調用服務的方法?
回答
做到這一點的一種方法是定義一個接口Android's AIDL並利用Binder
子系統來執行IPC。在我發佈的鏈接上有一組很棒的說明。我會從那裏開始,然後在這裏發帖,如果你有問題。儘管是一個非常複雜的主題(IPC)Android和Binder
做了一個非常好的工作,使其非常簡單(至少要開始,我敢肯定,如果你想,可以使它變得複雜;-))
編輯正如在評論中指出的那樣,如果Service
和客戶端在相同的進程中運行,這是不必要的。除非您另行指定,否則這是默認設置。但是,它仍然可以工作,它只會增加一點複雜性。
我不知道你的問題在哪裏,請張貼一些代碼。 使用活頁夾,活動可以訪問服務對象。請參閱API中的示例以創建活動和服務之間的連接。
在您的活動中擁有服務對象,您可以簡單地調用:
mService.yourMethod();
如果您確切地描述您的問題,並且正如我所說,發佈一些片段,我們可以幫助您更好。
你爲什麼不把一些鏈接到有用的資源?發佈一些關於如何綁定服務並隨後調用其方法的框架片段? :) – Juri 2011-01-30 20:44:45
@Juri http://stackoverflow.com/questions/1916253/bind-service-to-activity-in-android無處它被鏈接 – CrandellWS 2017-01-13 12:42:09
有這個權利的服務文檔中的示例代碼,在「本地服務樣本」:
http://developer.android.com/reference/android/app/Service.html#LocalServiceSample
也爲那些人暗示AIDL - 如果你的服務和客戶端是所有部分你擁有.apk並在同一進程中運行(默認行爲),則不需要aidl;這只是額外的複雜性,不會給你任何東西。
下面是一個例子,這可能有助於
Server.java:
package com.example.bindservice.binder;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class Server extends Service {
IBinder mBinder = new LocalBinder();
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public class LocalBinder extends Binder {
public Server getServerInstance() {
return Server.this;
}
}
public String getTime() {
SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return mDateFormat.format(new Date());
}
}
Client.java
package com.example.bindservice.binder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.bindservice.binder.Server.LocalBinder;
public class Client extends Activity {
boolean mBounded;
Server mServer;
TextView text;
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (TextView)findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
text.setText(mServer.getTime());
}
});
}
@Override
protected void onStart() {
super.onStart();
Intent mIntent = new Intent(this, Server.class);
bindService(mIntent, mConnection, BIND_AUTO_CREATE);
};
ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Toast.makeText(Client.this, "Service is disconnected", 1000).show();
mBounded = false;
mServer = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(Client.this, "Service is connected", 1000).show();
mBounded = true;
LocalBinder mLocalBinder = (LocalBinder)service;
mServer = mLocalBinder.getServerInstance();
}
};
@Override
protected void onStop() {
super.onStop();
if(mBounded) {
unbindService(mConnection);
mBounded = false;
}
};
}
- 1. 如何從服務中調用活動中的方法
- 2. 如何從服務中調用活動方法
- 3. 如何從其他活動中調用服務方法
- 4. 服務如何與其活動通信?服務如何調用啓動該服務的活動中的方法?
- 5. 如何從其調用活動訪問服務的方法?
- 6. 如何從調用活動類中調用服務類的stopservice()方法
- 7. 調用方法從服務中更新活動中的TextViews
- 8. 如何從活動調用服務?
- 9. 如何在獨立過程中從服務中調用活動中的方法?
- 10. 如何從Android中的服務調用一個活動的方法?
- 11. 從服務類中調用活動類方法
- 12. 如何從BroadcastReceiver調用活動方法?
- 13. Android:調用從服務到活動的方法
- 14. 從公共服務方法調用活動時的NullPointerException
- 15. 調用一個活動的方法,從服務
- 16. 未從活動調用的Android服務方法
- 17. 從活動調用冗長的服務方法 - 最佳實踐
- 18. 從服務中調用活動
- 19. 從活動調用方法
- 20. 如何從服務中調用主要活動中的功能?
- 21. 來自服務的運行活動中的調用方法
- 22. 如何使用活動中的Messenger使用遠程服務調用方法
- 23. 如何從服務中調用的活動返回數據
- 24. 在Android中:如何從服務調用活動的功能?
- 25. 從服務調用的活動
- 26. 如何從服務中啓動活動?
- 27. 如何從活動中調用片段中的方法
- 28. Android - 如何從活動中調用片段中的方法
- 29. 如何確保服務從特定活動中被調用
- 30. 從活動調用後臺服務
你的鏈接不工作... – 2013-02-12 09:33:34