Android Intent-Filter для нескольких экранов

Я хочу запустить свое приложение из веб-браузера в Android, используя Intent-Filter на основе схемы, размещенной в теге DATA, как это.

    <activity android:name=".activity.LogoActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".activity.phone.MainActivityPhone" android:configChanges="orientation|keyboard"
         android:launchMode="singleTask">
        <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="my" android:host="mystore" />
        </intent-filter>
    </activity>

    <activity android:name=".activity.tablet.MainActivityTablet"  android:configChanges="orientation|keyboard"
         android:launchMode="singleTask">
        <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="my" android:host="mystore" />     
        </intent-filter>
    </activity>

Как видите, существует два основных действия для телефона и планшета, и в LogoActivity определяется, какое основное действие будет открыто по размеру экрана. Но проблема в том, что когда пользователь щелкает ссылку my://mystore в веб-браузере, есть два варианта запуска этого MainActivtyPhone и MainActivityTablet.

Я хочу, чтобы для uri my://mystore работал только один правильный фильтр намерений. Любая помощь? Спасибо.


person Sraka    schedule 25.08.2011    source источник


Ответы (1)


При первом запуске вашего приложения используйте PackageManager, чтобы отключить действие, которое вы не хотите использовать.

Пожалуйста, не придумывайте нестандартные схемы. Вместо этого используйте URL-адреса HTTP:

<data android:scheme="http" android:host="yourdomain.com" android:path="/something/or/another" />

Таким образом, вы можете поместить реальную веб-страницу в http://yourdomain.com/something/or/another, поэтому, если кто-то получит вашу ссылку, но не установит ваше приложение, он увидит вашу веб-страницу, а не получит сообщение об ошибке.

Кроме того, удалите android:configChanges или обработайте все изменения конфигурации.

person CommonsWare    schedule 25.08.2011