Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает событие onNewIntent на чтение метки 
:(
    Опции темы
aquamakc
Дата 12.1.2017, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.1.2017

Репутация: нет
Всего: нет



Доброго времени суток.
Пытаюсь по мунуалам читать NFC метку. Запускаюсь на устройстве на 6 андройде. NFC адаптер включен.

private NfcAdapter adapter;
private Tag myTag;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.NFC))
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.NFC}, 1);
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.BIND_NFC_SERVICE))
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.BIND_NFC_SERVICE}, 1);   
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
        adapter = NfcAdapter.getDefaultAdapter(this);
        if (adapter == null) {
            log.setText("Bad adapter");
            finish();
        }
        readFromIntent(getIntent());
        IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
        tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
    }
 
 @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        readFromIntent(intent);
        if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
            myTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        }
    }
 
    private void readFromIntent(Intent intent) {
        String action = intent.getAction();
        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
                || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)
                || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
            Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
           /* полезные действия */
        }
    }

Файл манифеста:

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
 
<intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
</intent-filter>
<meta-data
        android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/nfc_tech_filter" />

При контакте с NFC устройством ничего не происходит, даже не срабатывает точка останова в onNewIntent.

Такое ощущение, что что-то я пропустил, но не могу найти различия между моим кодом и кодом в статьях "на тему".
PM MAIL   Вверх
Felan
Дата 12.1.2017, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Активити не всегда получает NewIntent. Для этого она должна быть запущена с определенным флагом, типа SingleTop. Не увидел  в каком режиме активити запускается, так что в качестве предположения.

PS: Код форматируй, а то читать невозможно.

Это сообщение отредактировал(а) Felan - 12.1.2017, 19:00


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
aquamakc
Дата 16.1.2017, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.1.2017

Репутация: нет
Всего: нет



Felan
Код

<activity android:name=".MainActivity" android:launchMode="singleTop">
           <!-- <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain"/>
            </intent-filter>-->
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                       android:resource="@xml/nfc_tech_filter" />
            <!--<intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED"/>
            </intent-filter>-->
        </activity>


Метка есть.
Ситуация сейчас такая: установлено несколько программ для чтения NFC. Включая мою. При контакте с NFC устройством. ОС предлагает выбор этих программ. 2 другие читают метку. При выборе моей она открывается, но метку не считывает. И, даже, если она уже запущена - всё-равно открывается список программ.
PM MAIL   Вверх
Felan
Дата 16.1.2017, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 2.8.2007
Где: Самара

Репутация: нет
Всего: 7



Ну тогда даже не знаю. Попробуй вот тут почитать. Прям готовый пример практически. Смотри фореграунд чтение.

Может неправильное событие, может неправильный формат метки.
Некоторое содержимое NDEF меток нельзя перехватить. Ну по крайней мере мне не удалось. Если записан URL то телефон всегда предлагает выбор приложений. Попробуй записать сначала что-нибудь свое сторонней программой, потом уже читать.

Метка точно доступна для чтения?


--------------------
// Любая сложная система - это темный лес. Каждый в этом лесу протаптывает свои тропинки, по ним и бегает. Лишь изредка, сходя с них, мы находим много интересного, а порою и страшного.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.1226 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.