Service Intent must be explicit的解決方案


title: Service Intent must be explicit的解決方案
date: 2017-09-14 15:11:43
tags:

  • Android
    categories:
  • Android開(kāi)發(fā)筆記

今天在學(xué)習(xí)AIDL的時(shí)候,通過(guò)以下步驟:

  • 在AndroidMenifest中聲明service

    <service
        android:name=".MyService"
        android:process=":remote"
        android:exported="true">
        <intent-filter >
            <category android:name="android.intent.category.DEFAULT"></category>
            <action android:name="com.ihealth.learnaidl.MyService"></action>
        </intent-filter>
    </service>

  • 在客戶端中綁定service

Intent intentService=new Intent();
                intentService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intentService.setAction(ACTION_BIND_SERVICE);
                MainActivity.this.bindService(intentService,mServiceConnection,BIND_AUTO_CREATE);


  • 運(yùn)行程序,結(jié)果報(bào)錯(cuò)了!
    java.lang.IllegalArgumentException: Service Intent must be explicit
    20170914154711498

經(jīng)過(guò)查找資料Stackoverflow.com,發(fā)現(xiàn)是需要將隱含意圖轉(zhuǎn)換為顯示的意圖葛躏,然后啟動(dòng)再服務(wù)此改。

所以綜合Stackoverflow上給出的解決方案,現(xiàn)在大體上有兩種解決的方法.

1.先說(shuō)一個(gè)簡(jiǎn)單的辦法

Intent mIntent = new Intent();
//自定義的Service的action
mIntent.setAction("XXX.XXX.XXX");
//自定義Service的包名
mIntent.setPackage(getPackageName());
context.startService(mIntent);

即只需要多加一句話mIntent.setPackage(getPackageName());就可以解決.

2.另外一個(gè)比較麻煩的方法
先通過(guò)一個(gè)函數(shù)將隱式調(diào)用轉(zhuǎn)變?yōu)轱@示調(diào)用

/***
     * Android L (lollipop, API 21) introduced a new problem when trying to invoke implicit intent,
     * "java.lang.IllegalArgumentException: Service Intent must be explicit"
     *
     * If you are using an implicit intent, and know only 1 target would answer this intent,
     * This method will help you turn the implicit intent into the explicit form.
     *
     * Inspired from SO answer: http://stackoverflow.com/a/26318757/1446466
     * @param context
     * @param implicitIntent - The original implicit intent
     * @return Explicit Intent created from the implicit original intent
     */
    public static Intent createExplicitFromImplicitIntent(Context context, Intent implicitIntent) {
        // Retrieve all services that can match the given intent
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);

        // Make sure only one match was found
        if (resolveInfo == null || resolveInfo.size() != 1) {
            return null;
        }

        // Get component info and create ComponentName
        ResolveInfo serviceInfo = resolveInfo.get(0);
        String packageName = serviceInfo.serviceInfo.packageName;
        String className = serviceInfo.serviceInfo.name;
        ComponentName component = new ComponentName(packageName, className);

        // Create a new intent. Use the old one for extras and such reuse
        Intent explicitIntent = new Intent(implicitIntent);

        // Set the component to be explicit
        explicitIntent.setComponent(component);

        return explicitIntent;
    }

然后調(diào)用

Intent intent = new Intent();
                intent.setAction(ACTION_BIND_SERVICE);
                final Intent eintent = new Intent(createExplicitFromImplicitIntent(this,intent));
                bindService(eintent,mServiceConnection, Service.BIND_AUTO_CREATE);

兩種辦法都可以解決.記下來(lái),免得以后忘了.
感謝Stackoverflow~Google In-App billing, IllegalArgumentException: Service Intent must be explicit, after upgrading to Android L Dev Preview

Service Intent must be explicit: Intent

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拉庵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钉嘹,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间坐,死亡現(xiàn)場(chǎng)離奇詭異面粮,居然都是意外死亡少孝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門熬苍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稍走,“玉大人,你說(shuō)我怎么就攤上這事⌒隽常” “怎么了粱胜?”我有些...
    開(kāi)封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)盖淡。 經(jīng)常有香客問(wèn)我年柠,道長(zhǎng),這世上最難降的妖魔是什么褪迟? 我笑而不...
    開(kāi)封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任冗恨,我火速辦了婚禮,結(jié)果婚禮上味赃,老公的妹妹穿的比我還像新娘掀抹。我一直安慰自己,他們只是感情好心俗,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布傲武。 她就那樣靜靜地躺著,像睡著了一般城榛。 火紅的嫁衣襯著肌膚如雪揪利。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天狠持,我揣著相機(jī)與錄音疟位,去河邊找鬼。 笑死喘垂,一個(gè)胖子當(dāng)著我的面吹牛甜刻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播正勒,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼得院,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了章贞?” 一聲冷哼從身側(cè)響起祥绞,我...
    開(kāi)封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸭限,沒(méi)想到半個(gè)月后就谜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡里覆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年丧荐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喧枷。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虹统,死狀恐怖弓坞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情车荔,我是刑警寧澤渡冻,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站忧便,受9級(jí)特大地震影響族吻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜珠增,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一超歌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒂教,春花似錦巍举、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梦皮,卻和暖如春炭分,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剑肯。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工捧毛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人退子。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像型将,于是被迫代替她去往敵國(guó)和親寂祥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容