以前寫過一篇關(guān)于進(jìn)程間通信的博客
當(dāng)時(shí)用的還是4.2的系統(tǒng),跨進(jìn)程 的服務(wù)可以根據(jù)action進(jìn)行啟動(dòng)
Intent intent = new Intent(); intent.setAction("android.intent.action.aidl.server");但是現(xiàn)在用6.0時(shí)發(fā)現(xiàn)報(bào)錯(cuò)
01-06 01:54:14.140: : PRocess: com.fang.zrf.clientdemo, PID: 1850701-06 01:54:14.140: : java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=android.intent.action.aidl.server }01-06 01:54:14.140: : at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1209)01-06 01:54:14.140: : at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1308)01-06 01:54:14.140: : at android.app.ContextImpl.bindService(ContextImpl.java:1286)01-06 01:54:14.140: : at android.content.ContextWrapper.bindService(ContextWrapper.java:604)01-06 01:54:14.140: : at com.fang.zrf.clientdemo.MainActivity.onClick(MainActivity.java:70)01-06 01:54:14.140: : at android.view.View.performClick(View.java:5205) 報(bào)錯(cuò)之處service的intent必須是明確的,顯示的指出。這時(shí)候如果是在同一個(gè)應(yīng)用中可以調(diào)用類名啟動(dòng),那如果是不在同一個(gè)應(yīng)用中之能通過service的路勁來調(diào)用了。
可以通過setComponent來調(diào)用
intent.setComponent(new ComponentName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService"));也可以通過
intent.setClassName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService");來調(diào)用,因?yàn)楸举|(zhì)上是一樣的setClassName源碼也是創(chuàng)建了ComponentName對象public Intent setClassName(String packageName, String className) { mComponent = new ComponentName(packageName, className); return this; }其實(shí)思路就是通過packagename 和classname來調(diào)用,方法有好多。
|
新聞熱點(diǎn)
疑難解答
圖片精選