2

私は Android フォンで Siri のようなアシスタント アプリをいくつか使用しています。アシスタントにどこかに案内してもらいたいときはいつでも、組み込みの Google (または Android) ナビゲーション アプリが自動的に表示されます。今、私は自分のアプリを作成しました(少し違うことをしています)。ナビゲーション コマンドがトリガーされたときにポップアップして Google アプリと競合し、ユーザーが次回デフォルト アプリとして使用することを選択できるようにするには、どのようなサービスを提供すればよいですか?

ありがとう。

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; 

}

Google マップとロビンからナビゲーションを有効にすると、どちらもアプリを含むリストが生成され、選択すると意図などが認識されました。

ロビンのデフォルトとして Google ナビゲーター (または他のプログラム) を使用するためのチェック ボックスを以前にオンにした場合、アプリは起動しません。

ロビンのデータをクリアして、デフォルトの設定が関連付けられないようにする必要があります(一種の核オプションですが、関連付けを解除するために私が見つけた唯一の方法です)

アプリをデフォルトとして使用するように設定すると、常にアプリが起動され、正しいスキームとデータ パッケージが提供されました。

インテントを開始できるアプリのリストを含むロビンを示すスクリーン ショット (私の場合はナビゲーション テスト)

ロビン

ナビゲーションが押されたときにリストされたマイアプリ

于 2012-09-19T05:07:00.300 に答える