以前寫過一篇關于進程間通信的博客
當時用的還是4.2的系統,跨進程 的服務可以根據action進行啟動
Intent intent = new Intent(); intent.setAction("android.intent.action.aidl.server");但是現在用6.0時發現報錯
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)報錯之處service的intent必須是明確的,顯示的指出。這時候如果是在同一個應用中可以調用類名啟動,那如果是不在同一個應用中之能通過service的路勁來調用了。
可以通過setComponent來調用
intent.setComponent(new ComponentName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService"));也可以通過
intent.setClassName("com.fang.zrf.serverdemo", "com.fang.zrf.serverdemo.CustomService");來調用,因為本質上是一樣的setClassName源碼也是創建了ComponentName對象public Intent setClassName(String packageName, String className) { mComponent = new ComponentName(packageName, className); return this; }其實思路就是通過packagename 和classname來調用,方法有好多。
新聞熱點
疑難解答