2

我在我的 Android 手机上使用了一些类似 Siri 的助手应用程序。每当我想让助手引导我到某个地方时,它都会自动调出内置的谷歌(或安卓)导航应用程序。现在我创建了自己的应用程序(做的事情略有不同)。我应该提供什么服务,以便当导航命令被触发时,它会弹出并与谷歌应用程序竞争,并且用户可以选择下次使用它作为默认应用程序?

谢谢。

4

1 回答 1

5

更新以回应 Tung Mai Le 的评论。

为了让您的应用程序列出来处理 google.navigation 意图,我创建了一个小程序来测试我之前的答案。它工作得很好,所以我不确定问题出在哪里。

在装有 Android 4.0 的 HTC 手机上运行,​​我不确定您使用的是哪个版本的 Android,或者您的设备是否已植根等。

完整清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.navigation.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW" /> 
                <category android:name="android.intent.category.DEFAULT" /> 
                <data android:scheme="google.navigation" /> 
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

</manifest>

完整代码(不尝试解析)

package com.navigation.com;

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

public class MainActivity extends Activity {

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mIntent = getIntent(); 
        if (parseNavigationIntent(mIntent)) {

        {
    }

    private Intent mIntent = null; 

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);


        return true;
    }
}



private boolean parseNavigationIntent(Intent intent) {

   if (null == intent)
      return false; 

   String scheme = intent.getScheme();

   if (null==scheme || (!scheme.equals("google.navigation") && !scheme.equals("geo")))
       return false; 

   String data; 

   if (null == (data = intent.getData().getSchemeSpecificPart()))
       return false; 

    // parse data to get longitude, latitude, and possible address dependent on callers
    // formatting

    return true; 

}

I activated navigation from google maps, and from robin, both produced a list with my app in it, and when selected it recognized the intent etc.

如果您之前选中了使用 google navigator(或除您的之外的任何其他程序)作为 Robin 默认的复选框,那么您的应用程序将无法启动。

您必须清除 robin 的数据,使其不再具有关联的默认首选项(一种核选项,但这是我发现取消关联的唯一方法)

当我将它设置为默认使用我的应用程序时,它总是刚刚启动它并给了我正确的方案和数据包。

显示 robin 的屏幕截图,其中包含可以启动意图的应用程序列表(我的是 Navigation Test)

罗宾

推送导航时列出了我的应用程序

于 2012-09-19T05:07:00.300 回答