2013-08-27 3 views
0

Я хочу получить информацию о моем экране. В принципе, у меня есть три вкладки с длинными списками, я хочу отобразить фактическую вкладку и ее позицию.Информация о лучах к моему приложению или URL-адресу, если приложение не установлено

Моя цель состоит в том случае, если установлено приложение:
Beam некоторые идентификатор, вкладки и положение

Если приложение не установлен:
Я хочу предложить WebLink как этот http://example.com/viewer/42?tab=2

Я играю с этим кодом здесь:

adapter.setNdefPushMessageCallback(new CreateNdefMessageCallback() { 
    @Override 
    public NdefMessage createNdefMessage(NfcEvent event) { 
     return new NdefMessage(new NdefRecord[] { 
      NdefRecord.createExternal("com.example.android", "viewer", getData()), 
      NdefRecord.createUri(VIEWER_URL + id + "?tab=" + tab), 
      NdefRecord.createApplicationRecord("com.example.android"), 
      NdefRecord.createApplicationRecord("com.android.browser"), 
     }); 
    } 
}, this); 

Я был бы рад, если кто-то может объяснить мне, как это работает, и если это невозможно объяснить мне, почему это невозможно.

ответ

1

Как @NFC guy уже пояснялось, путь является Beam ваш URI (и только, что URI или, по крайней мере, URI в качестве первой записи этого ЦНК сообщения). Так что ваш ЦНК сообщения будут выглядеть примерно так:

new NdefMessage(new NdefRecord[] { 
    NdefRecord.createUri("http://example.com/viewer/ + id + "?tab=" + tab), 
    // TODO: add more records if you want to provide additional data to YOUR app if it is installed 
}); 

Тогда вы бы использовать NDEF_DISCOVERED фильтр намерений в манифесте приложения, чтобы поймать этот конкретный URI:

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:scheme="http" android:host="example.com" android:pathPrefix="/viewer/" /> 
</intent-filter> 

Если URI принадлежит вам (т.е. если никакие другие приложения не регистрируются для URI, который начинается с http://example.com/myapp/), и ваши установки приложений установлены, не будет выбора намерений (поскольку более конкретный URI будет иметь приоритет). Если ваше приложение установлено, оно получит URI. Если он не установлен, браузер откроет URI, или если другие приложения, зарегистрированные для NDEF_DISCOVERED, будут иметь только схему «http», будет выбран желающий (хотя обычно другие приложения, чем веб-браузеры, обычно должны регистрироваться для более конкретного URI) ,

Что касается текущего сообщения ЦНК:

  1. Вы не должны использовать более одного Android Application Record (AAR). Только один из них будет эффективен.
  2. Если вы используете AAR для своего приложения, вы не можете веб-браузеру поймать URI на случай, если ваше приложение не установлено. Вместо этого откроется список Play Store вашего приложения.
  3. Использование чего-либо, кроме URI, поскольку первая запись сделает автоматический запуск веб-браузера по умолчанию невозможным, если ваше приложение не установлено.
+0

Вы указываете на некоторые интересные моменты, как приложение будет предпочтительнее, если это единственный приемник URL для зарегистрированной схемы/url. Я проверю его на следующей неделе. Если это сработает, как описано, я приму свой ответ.Об открытии игрового магазина: я могу ссылаться на него в HTML, так что это IMHO без проблем. – rekire

2

Вы можете просто нарисовать веб-ссылку в записи Uri, я бы сказал, и добавить фильтр намерений для этого URL-адреса. Если приложение установлено, оно может получить требуемую информацию от разбора URL-адреса. А если нет, браузер откроется.

+0

У меня тоже была эта идея, но я хочу избежать выбора намерений. Я хотел бы добавить какие-то альтернативные сообщения NDEF. Я где-то читал, что было бы возможно, что я мог бы отправить сообщение в специальное приложение, и если бы он не был установлен для другого ... такого наилучшего подходящего алгоритма. – rekire

 Смежные вопросы

  • Нет связанных вопросов^_^