android方法調用service
⑴ android怎麼調用webservice
WebService是一種基於SOAP協議的遠程調用標准,通過webservice可以將不同操作系統平台、不同語言、不同技術整合到一塊。在Android SDK中並沒有提供調用WebService的庫,因此,需要使用第三方的SDK來調用WebService。PC版本的WEbservice客戶端庫非常豐富,例如Axis2,CXF等,但這些開發包對於Android系統過於龐大,也未必很容易移植到Android系統中。因此,這些開發包並不是在我們的考慮范圍內。適合手機的WebService客戶端的SDK有一些,比較常用的有Ksoap2,可以從http://code.google.com/p/ksoap2-android/downloads/list進行下載;將下載的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包復制到Eclipse工程的lib目錄中,當然也可以放在其他的目錄里。同時在Eclipse工程中引用這個jar包。
具體調用調用webservice的方法為:
(1) 指定webservice的命名空間和調用的方法名,如:
SoapObject request =new SoapObject(http://service,」getName」);
SoapObject類的第一個參數表示WebService的命名空間,可以從WSDL文檔中找到WebService的命名空間。第二個參數表示要調用的WebService方法名。
(2) 設置調用方法的參數值,如果沒有參數,可以省略,設置方法的參數值的代碼如下:
Request.addProperty(「param1」,」value」);
Request.addProperty(「param2」,」value」);
要注意的是,addProperty方法的第1個參數雖然表示調用方法的參數名,但該參數值並不一定與服務端的WebService類中的方法參數名一致,只要設置參數的順序一致即可。
(3) 生成調用Webservice方法的SOAP請求信息。該信息由SoapSerializationEnvelope對象描述,代碼為:
SoapSerializationEnvelope envelope=new
SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;
創建SoapSerializationEnvelope對象時需要通過SoapSerializationEnvelope類的構造方法設置SOAP協議的版本號。該版本號需要根據服務端WebService的版本號設置。在創建SoapSerializationEnvelope對象後,不要忘了設置SOAPSoapSerializationEnvelope類的bodyOut屬性,該屬性的值就是在第一步創建的SoapObject對象。
(4) 創建HttpTransportsSE對象。通過HttpTransportsSE類的構造方法可以指定WebService的WSDL文檔的URL:
HttpTransportSE ht=new HttpTransportSE(「http://192.168.18.17:80
/axis2/service/SearchNewsService?wsdl」);
(5)使用call方法調用WebService方法,代碼:
ht.call(null,envelope);
Call方法的第一個參數一般為null,第2個參數就是在第3步創建的SoapSerializationEnvelope對象。
(6)使用getResponse方法獲得WebService方法的返回結果,代碼:
SoapObject soapObject =( SoapObject) envelope.getResponse();
以下為簡單的實現一個天氣查看功能的例子:
publicclass WebService extends Activity {
privatestaticfinal String NAMESPACE ="http://WebXml.com.cn/";
// WebService地址
privatestatic String URL ="http://www.webxml.com.cn/
webservices/weatherwebservice.asmx";
privatestaticfinal String METHOD_NAME ="getWeatherbyCityName";
privatestatic String SOAP_ACTION ="http://WebXml.com.cn/
getWeatherbyCityName";
private String weatherToday;
private Button okButton;
private SoapObject detail;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
okButton = (Button) findViewById(R.id.ok);
okButton.setOnClickListener(new Button.OnClickListener() {
publicvoid onClick(View v) {
showWeather();
}
});
}
privatevoid showWeather() {
String city ="武漢";
getWeather(city);
}
@SuppressWarnings("deprecation")
publicvoid getWeather(String cityName) {
try {
System.out.println("rpc------");
SoapObject rpc =new SoapObject(NAMESPACE, METHOD_NAME);
System.out.println("rpc"+ rpc);
System.out.println("cityName is "+ cityName);
rpc.addProperty("theCityName", cityName);
AndroidHttpTransport ht =new AndroidHttpTransport(URL);
ht.debug =true;
SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;
envelope.dotNet =true;
envelope.setOutputSoapObject(rpc);
ht.call(SOAP_ACTION, envelope);
SoapObject result = (SoapObject) envelope.bodyIn;
detail = (SoapObject) result
.getProperty("getWeatherbyCityNameResult");
System.out.println("result"+ result);
System.out.println("detail"+ detail);
Toast.makeText(WebService.this, detail.toString(),
Toast.LENGTH_LONG).show();
parseWeather(detail);
return;
} catch (Exception e) {
e.printStackTrace();
}
}
privatevoid parseWeather(SoapObject detail)
throws UnsupportedEncodingException {
String date = detail.getProperty(6).toString();
weatherToday ="今天:"+ date.split("")[0];
weatherToday = weatherToday +"\n天氣:"+ date.split("")[1];
weatherToday = weatherToday +"\n氣溫:"
+ detail.getProperty(5).toString();
weatherToday = weatherToday +"\n風力:"
+ detail.getProperty(7).toString() +"\n";
System.out.println("weatherToday is "+ weatherToday);
Toast.makeText(WebService.this, weatherToday,
Toast.LENGTH_LONG).show();
}
}
⑵ android怎麼調用系統服務
1、Started
Started的Service,通過在Application里用startService(Intent intent)方法來啟動。這種類型的Service一經啟動,會在後面無休止地運行,即使啟動它的Activity被Destroy掉。要停止此類型的Service,可在Service中調用stopSelf()或在Application中調用stopService(Intent intent),要不然就只能等Android系統在系統資源緊張的時候把它殺掉。
2、Bound
Bound的Service,通過在Application里調用bindService()方法來啟動。該類型的Service與Application綁定在一起,一旦綁定的所有Application消失了,Android會Detroy掉該Service。也可以主動調用unbindService()方法來解綁Service。
有時候我們想在Activity中獲知Service的狀態,例如一個音樂播放器,Service負責音樂播放,Activity負責顯示當前歌曲名和播放進度。
可以用Broadcast,這個也不失為一個解決方法。
但如果可以獲取Service實例,那麼就可以調用Service中自定義的一些方法來獲取Service狀態了。
首先要明確的是,第一種類型的Service是無能為力的。因為Activity與Service之間並沒有相關聯的介面,即使這個Service是在Activity里start的,一旦start,兩者不再有關聯。
⑶ android 怎麼利用service
1、要使用Service,首先就是在配置文件里嗎添加Service,如果不填加,你的Service是不能夠使用的。目前學到的方法有兩種
方法一:<service android:enabled="true" android:name=".PlayService" />
方法二:<service android:name=".PlayService" />
點後面是Service類的名字。
2、工程包括兩個類:
ServiceActivity.java
PlayService.java
其中:ServiceActivity.java定義了兩個按鈕,分別控制音樂的播放與停止。
用startService和stopService完成Activity與Service之間的切換,啟動Service以及取消Service
⑷ android調用webservice介面都有什麼方式
android調用webservice介面的方法是利用第三方jar包完成。
1、首先如果想在Android平台上調用WebService需要依賴於第三方類庫:ksoap2 而在Android平台上,使用的是ksoap2 Android,一個高效,輕量級的SOAP開發包
⑸ Android應用組件 —— Service
官方原文: 地址
本文摘錄自官方原文,方便自己觀看。
service 是一個可以在後台長時間運行的操作而不提供用戶界面的應用組件。服務可以由其他應用組件啟動,而且即使用戶切換到其他應用程序,服務仍將在後台繼續運行。此外,組件可以綁定到服務,以與之進行交互,甚至執行進程間的通信(IPC)
服務基本分為兩種形式:
啟動
綁定
上述雖然分開概括這兩種服務,但是服務可以同時以這兩種方式運行,也就是說,他既可以是啟動服務(以無限期運行),也允許綁定。問題在於是否實現了一組回調方法: onStartCommand() (允許組件啟動服務)和 onBing() (允許綁定服務)。
無論應用是出於啟動狀態還是綁定狀態,亦或處於啟動並且綁定狀態,任何應用組件均可以像使用Activity那麼調用Itent來使用服務(即使此服務來自另一應用)。 不過,您可以通過清單文件將服務聲明為私有服務,並阻止其他應用訪問。 使用清單文件聲明服務部分將對此做更詳盡的闡述。
注意:
服務在其託管進程的主線程中運行,它既不創建自己的線程,也不在單獨的進程中運行(除非另行指定)。這意味著,如果服務將執行任何CPU密集型工作或者阻止性操作(我理解為耗時操作,例如 MP3 播放或聯網),則應在服務內創建新線程來完成這項工作。通過使用單獨的線程,可以降低發生「應用無響應」(ANR) 錯誤的風險,而應用的主線程仍可繼續專注於運行用戶與 Activity 之間的交互。
要創建服務,您必須創建 Service 的子類(或使用它的一個現有子類)。在實現中,您需要重寫一些回調方法,以處理服務生命周期的某些關鍵方面並提供一種機制將組件綁定到服務(如適用)。 應重寫的最重要的回調方法包括:
onStartCommand()
onBind()
onCreate()
onDestroy()
如果組件通過調用 startService() 啟動服務(這會導致對 onStartCommand() 的調用),則服務將一直運行,直到服務使用 stopSelf() 自行停止運行,或由其他組件通過調用 stopService() 停止它為止。
如果組件是通過調用 bindService() 來創建服務(且未調用 onStartCommand() ,則服務只會在該組件與其綁定時運行。一旦該服務與所有客戶端之間的綁定全部取消,系統便會銷毀它。
如同 Activity(以及其他組件)一樣,您必須在應用的清單文件中聲明所有服務。
要聲明服務,請添加 <service> 元素作為 <application> 元素的子元素。例如:
為了確保應用的安全性, 請始終使用顯式 Intent 啟動或綁定 Service,且不要為服務聲明 Intent 過濾器。 啟動哪個服務存在一定的不確定性,而如果對這種不確定性的考量非常有必要,則可為服務提供 Intent 過濾器並從 Intent 中排除相應的組件名稱,但隨後必須使用 setPackage() 方法設置 Intent 的軟體包,這樣可以充分消除目標服務的不確定性。
此外,還可以通過添加 android:exported 屬性並將其設置為 "false" ,確保服務僅適用於您的應用。這可以有效阻止其他應用啟動您的服務,即便在使用顯式 Intent 時也如此
Service
IntentService
簡單地說,服務是一種即使用戶未與應用交互也可在後台運行的組件。 因此,您應僅在必要時才創建服務。
如需在主線程外部執行工作,不過只是在用戶正在與應用交互時才有此需要,則應創建新線程而非服務。 例如,如果您只是想在 Activity 運行的同時播放一些音樂,則可在 onCreate() 中創建線程,在 onStart() 中啟動線程,然後在 onStop() 中停止線程。您還可以考慮使用 AsyncTask 或 HandlerThread,而非傳統的 Thread 類。
前台服務被認為是用戶主動意識到的一種服務,因此在內存不足時,系統也不會考慮將其終止。 前台服務必須為狀態欄提供通知,放在「正在進行」標題下方,這意味著除非服務停止或從前台移除,否則不能清除通知。
要請求讓服務運行於前台,請調用 startForeground() 。此方法採用兩個參數:唯一標識通知的整型數和狀態欄的 Notification 。例如:
注意 :提供給 startForeground() 的整型 ID 不得為 0。
要從前台移除服務,請調用 stopForeground() 。此方法採用一個布爾值,指示是否也移除狀態欄通知。 此方法不會停止服務。 但是,如果您在服務正在前台運行時將其停止,則通知也會被移除。
與 Activity 類似,服務也擁有生命周期回調方法,您可以實現這些方法來監控服務狀態的變化並適時執行工作。 以下框架服務展示了每種生命周期方法:
注 :與 Activity 生命周期回調方法不同,您 不 需要調用這些回調方法的超類實現。
注 :盡管啟動服務是通過調用 stopSelf() 或 stopService() 來停止,但是該服務並無相應的回調(沒有 onStop() 回調)。因此,除非服務綁定到客戶端,否則在服務停止時,系統會將其銷毀 — onDestroy() 是接收到的唯一回調。
⑹ android7.0 怎樣啟動service
安卓7.0開啟夜間模式介紹: Android 7.0正式版已經發布,然而此前在開發者預覽版中的一些功能遭到了閹割,最終沒有在正式版中加入,其中之一便是夜間模式。而實際上,安卓7.0正式版中是有這個功能的,只不過被谷歌隱藏了而已。 Reddit網站上的帖子表示,安卓7.0正式版隱藏了夜間模式的功能,可通過一些ADB命令開啟,但普通消費者並不懂怎樣使用ADB命令,現在有開發者專門開發了一個開啟安卓7.0隱藏夜間模式的APP,放在谷歌商店供下載。 用戶只需要安裝這款APP,然後點擊打開夜間模式功能按鈕,之後去快速啟動欄按住設置圖標,進入系統調諧器界面開啟夜間模式功能即可。 值得一提的是,通過安卓6.0.1升級到Android 7.0牛軋糖的用戶無法使用以上方法打開夜間模式,只有從以前的開發者預覽版升級到Android 7.0牛軋糖正式版的手機才可以。 既然夜間模式的代碼仍然在安卓7.0正式版中,我們估計谷歌會在未來合適的時候正式放開這個功能。
⑺ android怎樣調用webService
//WebService的命名空間
static final String namespace = "http://impl.service.suncreate.com";
//伺服器發布的url
static final String url = http://10.100.3.41/axis2/services/UploadService;
final String methodName = "upload"; // 函數名
final int sessionID = "111111"; //sessionID
//創建HttpTransportSE對象,通過HttpTransportSE類的構造方法可以指定WebService的url
HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;
//指定WebService的命名空間和函數名
SoapObject soapObject = new SoapObject(namespace, methodName);
//設置調用方法參數的值
soapObject.addProperty("sessionID", sessionID); //sessionID
soapObject.addProperty("data", cds); //cds是需要傳遞的對象
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
envelope.bodyOut = transport;
envelope.setOutputSoapObject(soapObject);
//使用call方法調用WebService方法
transport.call(null, envelope);
SoapObject sb = (SoapObject) envelope.bodyIn;
String xmlMessage = sb.toString(); // 獲取從伺服器端返回的XML字元串
⑻ android 怎麼調用service里的方法
直接傳activity 引用肯定是不行的, 最簡單的是 用靜態全局變數 ,不過不推薦。 所以只能復雜一點 ,不能service可以直接調用activity ,只能傳消息給activity ,讓activity 執行特定的方法。 就是 service start activity 。 而activity 設置為 single instance ,在newIntent 方法 裡面 處理 傳入消息。 還有一個方法就是activity 裡面定義 一個 內部類 broadcast ,然後 service 調用sendbraoadcast , broadcast 再調用 activity 方法。
⑼ Android開發怎麼調試Service
Android開發如何調試Service
Android 開發中,添加代碼對Service 進行調試 。
介紹
以調試 模式啟動Android 項目時,在service 中設置斷點,調試 器不會停止下來
解決方法
所有的這種情況下,都是在代碼中聲明。調用的方法是:
android.os.Debug.waitForDebugger();
舉個例子,SoftKeyboard:
public class SoftKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener { @Override public void onConfigurationChanged(Configuration newConfig) { Log.d("SoftKeyboard", "onConfigurationChanged()"); /* now let's wait until the debugger attaches */ android.os.Debug.waitForDebugger(); super.onConfigurationChanged(newConfig); /* do something useful... */ }
代碼中你可以看到,首先是調用了日誌記錄器logger,代碼運行到這里時,會將在logcat中添加一條記錄,這是跟蹤代碼運行的一種方法,如果不需要在斷點上停止時可以使用。但通常為了更詳細的調試 ,這是不足夠的。
第二條語句等待添加調試 器,添加了這條語句之後,可以在這個方法的任何地方添加斷點。
Activity也是應用的部分時調試 Service 就更加容易了。那種情況下,首先需要啟動Activity,調試 器也可以在Service 的斷點中停止下來,不需要調用 waitForDebugger()。
⑽ Android中如何啟用Service,如何停用Service
• Context.startService()
• Context.bindService()
1. 在同一個應用任何地方調用 startService() 方法就能啟動 Service 了,然後系統會回調 Service 類的
onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運行在後台,直到
Context.stopService() 或者 selfStop() 方法被調用。另外如果一個 Service 已經被啟動,其他代碼再試圖調用
startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。
2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service
的客戶類綁起來,如果調用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執行後
Service 會回調上邊提到的 onBind() 方發,你可以從這里返回一個實現了 IBind
介面的類,在客戶端操作這個類就能和這個服務通信了,比如得到 Service 運行的狀態或其他操作。如果 Service
還沒有運行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調用 onStart()。
總結:
1.
startService()的目的是回調onStart()方法,onCreate()
方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那麼Service的onCreate方法
已經調用了)那麼startService()將跳過onCreate() 方法。
2.
bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋梁,並不負責更多的工作(例如一個
Service需要連接伺服器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啟動的服
務)。
由於Service 的onStart()方法只有在startService()啟動Service的情況下才調用,故使用onStart()的時候要注意這點。