如何通过URL方案启动Android服务?

时间:2014-07-24 18:13:35

标签: android android-service android-manifest google-glass

我的Android应用程序以服务开头。

我正在研究URL方案。虽然设置它没有问题(数据android:scheme =" abc"),但它似乎在调用" abc://"从浏览器不起作用,我无法在Logcat中找到任何东西。

    <service
        android:name="com.xyz.abcService"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
        </intent-filter>
        <meta-data
            android:name="com.google.android.glass.VoiceTrigger"
            android:resource="@xml/voice_trigger_start" />
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.LAUNCHER" />
                 <data  android:scheme="abc" />
        </intent-filter>  
    </service>

在向Manifest文件添加intent-filter之前,它看起来像:

    <service
        android:name="com.xyz.abcService"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
        </intent-filter>
        <meta-data
            android:name="com.google.android.glass.VoiceTrigger"
            android:resource="@xml/voice_trigger_start" />
    </service>

即使删除语音触发器,我也无法启动abc。

话虽如此,我在调用Activity时没有任何问题。

是否有人知道有任何限制?

2 个答案:

答案 0 :(得分:1)

我所做的只是创建一个新的Activity,并将意图插入Activity。

    <activity
        android:name="com.xyz.launcher.LauncherActivity"
        android:label="@string/app_name"
        android:enabled="true">  
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.LAUNCHER" />
                 <data  android:scheme="abc" />
        </intent-filter>          
    </activity>

反过来,活动会调用服务。

package com.xyz.launcher;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.xyz.abcService;

public class LauncherActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent serviceIntent = new Intent(this, abcService.class);
        startService(serviceIntent);
    }

}

从用户的角度来看,它在视觉上没有任何区别。

答案 1 :(得分:0)

使用方案时,它遵循以下格式:

<scheme_value_that_matches_activity_scheme>://<action_name><optional_parameters>

在&#39; abc://&#39;之后您输入了其他任何内容吗?根据我的理解,您可以输入您想要执行的操作,例如: &#39;开&#39 ;.然后它看起来像&#39; abc:// open&#39;。我没有为自己尝试过,但这可能是解决问题的方法。

来自: Jeff Tang Beginning Google Glass Development,p。 314-315