作者winsummer (winsummer)
看板AndroidDev
標題[問題] AIDL永遠不會connect
時間Fri Jul 21 15:01:21 2017
各位前輩好
我的程式ServiceConnection永遠不會被呼叫
不知道是那裏出了問題
Debug了2天..
貼上程式碼
http://ideone.com/46JLBU
另外
AndroidManifest.xml
也加上了
<service
android:name="com.topway.swiftplayservic.IPlayAIDLServicee"
android:process=":remote"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="SwiftPlayService"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
不知道原因出在那邊
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 202.175.124.66
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1500620486.A.863.html
1F:→ ssccg: 你的intent幹麻setPackage? 傳的還是class不是package? 07/21 15:09
2F:→ ssccg: 另外你new Intent用到的是String action這個ctor 07/21 15:12
你好
我一開始也沒有setPackage
是看了這個才加上去
https://goo.gl/5CsxZC
我不加或是把他改成intent.setPackage("com.topway.swiftplayservice");
也是沒有解決問題
另外你new Intent用到的是String action這個ctor
這個我不懂是什麼意思
new Intent我試了很多方法
例如
Intent intent = new Intent(MainActivity.this, IPlayAIDLService.class);
也還是不行 謝謝你的回覆
看著我的bindService一直回傳false 我也快不行了...
※ 編輯: winsummer (202.175.124.66), 07/21/2017 15:29:08
※ 編輯: winsummer (202.175.124.66), 07/21/2017 15:34:53
3F:→ ssccg: 簡單的說你現在這個寫法,會變成去找package name為 07/21 16:00
4F:→ ssccg: com.topway.swiftplayservice.IPlayAIDLService的App中 07/21 16:00
5F:→ ssccg: manifest裡有個intent filter的action叫做 07/21 16:01
6F:→ ssccg: com.topway.swiftplayservice.IPlayAIDLService的service 07/21 16:01
7F:→ ssccg: 但是你manifest裡action是SwiftPlayService 07/21 16:03
8F:→ ssccg: 至於package name是什麼你沒寫,不過我想不會是class name 07/21 16:03
9F:→ ssccg: 你不加或是改成別的當然也沒用,因為沒有符合的action 07/21 16:08
你好 在此先感謝你的回覆
我的package name 為 package com.example.fox.watchtest;
而AIDL是外部提供的jar, 不是我開發的
分別為
import com.topway.swiftplayservice.IPlayAIDLService;
import com.topway.swiftplayservice.PlayParams;
所以我要改成
intent.setPackage("com.example.fox.watchtest");
然後manifest裡action也要更改為
com.example.fox.watchtest
這樣? 感謝回覆
※ 編輯: winsummer (202.175.124.66), 07/21/2017 16:28:03
10F:→ ssccg: 你是要呼叫別的App中的service? 07/21 16:35
11F:→ ssccg: manifest不用寫,Intent要看對方的manifest怎麼寫的 07/21 16:40
12F:→ winsummer: 那getPackage也不用寫嗎 07/21 17:05
13F:→ ssccg: setPackage是限定找特定的app,通常是像Intent.ACTION_VIEW 07/21 17:26
14F:→ ssccg: 這種會找到一堆的Intent時選特定app用 07/21 17:27
15F:→ ssccg: 如果有正確的ComponentName(package name + class name) 07/21 17:27
16F:→ ssccg: 其他都不需要,如果是用action,像這種service通常也不太會 07/21 17:29
17F:→ ssccg: 重複也不需要 07/21 17:29
18F:→ winsummer: 了解 謝謝解答 07/24 11:04
19F:推 KeySabre: intent 該是 implicit 或 explicit 的問題 08/04 02:17