Как перехватить намерение Google Maps в Android? - PullRequest
5 голосов
/ 29 марта 2011

Я пытался перехватить намерение Google Maps следующим образом:

Intent myIntent = new Intent (android.content.Intent.ACTION_VIEW, Uri.parse ("geo: 37.423156, -122.084917"));

но я не нашел ни одного примера, ссылки или документации по этому вопросу. Итак, я думаю, что, к сожалению, это невозможно.

В файле манифеста я поместил несколько фильтров намерений. Особенно я думаю, что следующий фильтр намерений должен совпадать с упомянутым намерением.

<intent-filter>
<action android:name="android.content.Intent.ACTION_VIEW" />
        <data android:scheme="geo"/>
    </intent-filter>

Кроме того, я попытался выяснить, какие действия соответствуют этому конкретному намерению, с помощью:

List resolves = getPackageManager().queryIntentActivities(myIntent, 0 );
ResolveInfo firstRevolve=(ResolveInfo) resolves.get(0);
IntentFilter myIF=firstRevolve.filter;

Тем не менее, только MapsActivity совпадает с намерением, а не с моим Activity, и удивительно, что myIF имеет значение null, поэтому я не могу получить фильтр намерений, который используется в деятельности карт Google.

Кроме того, я установил «Intent Intercept» из Android Market, но он не фиксирует это намерение.

Итак, мне нужна помощь / идея. Кто-нибудь знает, что происходит? По моему мнению, Google ограничивает этот перехват, но это ограничение не указано.

Любая помощь будет оценена. С наилучшими пожеланиями, Пабло.

Ответы [ 6 ]

5 голосов
/ 27 сентября 2012

Пример кода ниже просто отлично работает в моем проекте.

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="https" android:host="maps.google.com" />
    <data android:scheme="geo" />
</intent-filter>
1 голос
/ 13 мая 2015

Эта запись манифеста сработала для меня:

    <activity
        <intent-filter>  
          <!-- Filter to run activity without geo --> 
            <action android:name="com.example.MYACTION" />                
            <category android:name="android.intent.category.DEFAULT" />                     
        </intent-filter>
        <intent-filter>   
            <!-- Filter for geo scheme geo -->                  
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />               
            <data android:scheme="geo" />
        </intent-filter>
    </activity>

в своей деятельности вы можете проверить наСоздать:

protected void onCreate(Bundle savedInstanceState) {
  Intent intent = getIntent();  
  String action = intent.getAction();
  Uri data      = intent.getData();

  if(      Intent.ACTION_VIEW.equals(action) ) {
    if(data != null && "geo".equals(data.getScheme())) {  

      // do something with geo uri data
    }
  }
  else {
    // Code for activity when it`s started without geo uri
  }
}
1 голос
/ 29 марта 2011

Итак, я думаю, что, к сожалению, это невозможно.

Я довольно уверен, что это так.

Особенно я думаю, что следующий фильтр намерений должен совпадать с упомянутым намерением.

У вас неверная строка действия. Если вы прочитали документацию , строковое представление ACTION_VIEW будет:

android.intent.action.VIEW

это не то, что у вас есть в <intent-filter>.

0 голосов
/ 09 октября 2018

Для этого вы должны добавить следующие <intent-filter> внутри тега <activity></activity> соответствующей ДЕЯТЕЛЬНОСТИ в файле AndroidManifest.xml.

<intent-filter >
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="geo"/>
    <data android:scheme="google.navigation"/>
</intent-filter>
0 голосов
/ 18 мая 2015

Я использую фильтр нескольких намерений, и эта работа со мной

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

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:host="maps.google.com"
                    android:scheme="https"/>
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:host="maps.google.com"
                    android:scheme="http"/>
            </intent-filter>
0 голосов
/ 07 января 2013

Я тоже пытался заставить это работать.Кажется, здесь есть несколько путей:

1) Содержание со схемой: "http" или "https" с полномочиями "maps.google.com".Кажется, это работает нормально, как и стандартные намерения.2) использование схемы «гео» в качестве ОП, упомянутого в вопросе.Похоже, это не открыто для перехвата.

@ CommonsWare Даже если в манифесте используется «android.intent.action.VIEW» со следующим фильтром:,

кажется НЕ возможно перехватить его.

Когда вы упомянули "Я довольно уверен, что это так.", Вы имели в виду, что IS возможно или НЕТ возможно?

...