С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 28.07.2022
Сообщений: 169
1

NFC не читает ТАГ (На разных смартфонах)

01.12.2022, 15:33. Показов 433. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем дня!

Что-то я зачатил тут писать, но это значит, что тут самый лучшие специалисты, готовые помочь новичку и это хорошо!

Столкнулся с такой проблемкой....

На readme 9 (Android 10) Считывание карты "MifareClassic" полностью работает. Читаю тег, читаю сектора с ключиком и тд...

Но как поставил тот же код на SUMSUNG A71 (Android 12) Начинает чудить!

Не могу прочитать тег - пишет нулл...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
он креэте {
 
   try {
            mNFCAdapter = NfcAdapter.getDefaultAdapter(this);
        } catch (Exception e) {
            Toast.makeText(this,"Ошибка инициализации NFC!", Toast.LENGTH_LONG).show();
 
        }
 
 
  if (mNFCAdapter == null) {
            // Device does not support NFC
            Toast.makeText(this,"Устройство не поддерживает NFC!", Toast.LENGTH_LONG).show();
            try {
                Intent intent = new Intent(this, vibor.class);
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            } finally{finish();}
 
        }  else {
            if (!mNFCAdapter.isEnabled()) {
                // NFC is disabled
                Toast.makeText(this, "NFC выключен... Включите его.",Toast.LENGTH_LONG).show();
 
                try {
                    Intent intent = new Intent(this, vibor.class);
                    startActivity(intent);
                } catch (Exception e) {
                    e.printStackTrace();
                }finally{finish();}
 
            } else {
 
                        try {
                        createPendingIntent();
                       } catch (Exception e) {
                       Toast.makeText(this, "Ошибка инициализаци намеренья №841 "+ e.toString(),Toast.LENGTH_LONG).show();
 
                       }
 
 
}
 
}
 
 
 @Override
    protected void onPause() {
        super.onPause();
        try {
        mNFCAdapter.disableForegroundDispatch(nfc_scan.this);
        } catch (Exception e) {
            Toast.makeText(this,"Ошибка пвузы NFC №611", Toast.LENGTH_LONG).show();
        }
 
    }
 
 @Override
    public void onResume() {
        super.onResume();
         try {
            mNFCAdapter.enableForegroundDispatch(nfc_scan.this, mNfcPendingIntent, null,null);
        } catch (Exception e) {
            Toast.makeText(this,"Ошибка возобновления NFC #217 "+ e.toString(),Toast.LENGTH_LONG).show();
        }
 
}
 
 
 
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
 
      if (mNFCAdapter!=null) {
          
            Tag mTag;
            mTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);    
            if (mTag != null) {
                Toast.makeText(this, mTag.toString(), Toast.LENGTH_LONG).show();
            } else {
                xx.setText("null");
            }
        }else {  xx.setText("adapter=null");}
 
 //РЕЗУЛЬТАТ НУЛЛ!
 
}
 
 
 private void createPendingIntent() {
     if (mNfcPendingIntent == null) {
         Activity activity = nfc_scan.this;
         Intent intent = new Intent(activity, activity.getClass());
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
             intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
             mNfcPendingIntent = PendingIntent.getActivity(activity, 0, intent, PendingIntent.FLAG_IMMUTABLE);
         } else {
             intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
             mNfcPendingIntent = PendingIntent.getActivity(activity, 0, intent, 0);
         }
     }
 }

nfc_tech_filter
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
 
<resources
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
    <tech>android.nfc.tech.IsoDep</tech>
    <tech>android.nfc.tech.NfcA</tech>
    <tech>android.nfc.tech.NfcB</tech>
    <tech>android.nfc.tech.NfcF</tech>
    <tech>android.nfc.tech.NfcV</tech>
    <tech>android.nfc.tech.Ndef</tech>
    <tech>android.nfc.tech.NdefFormatable</tech>
    <tech>android.nfc.tech.MifareClassic</tech>
    <tech>android.nfc.tech.MifareUltralight</tech>
</tech-list>
    </resources>
Манифест
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
            </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" />
 
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
В чем я ошибся?

Добавлено через 8 минут
Забыл дописать.
В Манифесте есть строки.

<uses-permission android:name="android.permission.NFC"/>
<uses-feature android:name="android.hardware.nfc" android:required="true"/>

Добавлено через 43 минуты
Смахивает на то, что ошибка в самом "intent".

Добавлено через 33 минуты
Такое условие тоже дает false....

if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){

Нфс рабочий, скачал утилиту из Плэй маркета, она смогла прочесть.

В чем прикол?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2022, 15:33
Ответы с готовыми решениями:

мета таг KEYWORDS
Приветствую Всех! Вопрос к опытным оптимизаторам - будет ли польза в оптимизации для...

Новый мета-таг от Google
Использование описаний сайтов из каталога Open Directory Project (DMOZ) в выдаче поисковика Google...

Не могу понять почему Яндекс не читает мой Sitemap? а google читает.
Захожу в яндекс мастер выбираю sitemap а он мне пишет ошибка в файле sitemap невалидный sitemap Но...

Проблема с OCR Puma.Net (читает текст с одной картинки, но не читает с другой)
Здравствуйте, есть проект с оцр Puma.Net и есть 2 картинки 1ая и 2ая, только вот с первой картинки...

4
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
01.12.2022, 19:59 2
Для начала добавь в манифест поддержку других тегов, а в активити обработку в onNewIntent продублировать в onCreate.
0
2 / 2 / 0
Регистрация: 28.07.2022
Сообщений: 169
04.12.2022, 13:38  [ТС] 3
Цитата Сообщение от ExFau$t Посмотреть сообщение
Для начала добавь в манифест поддержку других тегов
можно подробнее по этому вопросу? Я вроде все тэги в "nfc_tech_filter" прописал, или нет?
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
04.12.2022, 15:02 4
В action в intent-filter имел в виду.
0
2 / 2 / 0
Регистрация: 28.07.2022
Сообщений: 169
07.12.2022, 15:50  [ТС] 5
Цитата Сообщение от ExFau$t Посмотреть сообщение
onNewIntent продублировать в onCreate.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void onCreate(Bundle savedInstanceState) {
 
    [...]
 
   Toast.makeText(this, "я тут1",Toast.LENGTH_LONG).show();
                Intent startIntent = getIntent();
                if (startIntent != null){
                    Toast.makeText(this, "Интент не ноль!",Toast.LENGTH_LONG).show();
                //условие проходит, но какой интент неизвестно.
                }
 
                if ((startIntent != null) &&
                        (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(startIntent.getAction()) ||
                                NfcAdapter.ACTION_TECH_DISCOVERED.equals(startIntent.getAction()))) {
                    // TODO: process intent
                    Toast.makeText(this, "я тут2",Toast.LENGTH_LONG).show();
         // До сюда код не доходит, видимо условие не проходит...
                }
 
}
Доброго всем дня! Извиняюсь за задержку, но задача все еще не решена, Засунул код в oncreate как написал выше, проку нет, вернее я думаю что " (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(startIntent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(startIntent.getAction()))" Эти условия не проходят... А вот на счет, что в манифест засунуть я так и не понял ... Добавил только .NDEF_DISCOVERED, больше ничего не нагуглил... "других тегов" - можно еще подробнее? :-)

Манифест.
XML
1
2
3
4
5
6
7
8
9
<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" />
                <action android:name="android.nfc.action.TAG_DISCOVERED" />
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
Заранее всем огромное спасибо!

Добавлено через 23 минуты
Перевел посмотреть что в интенте находится "intent.toString();" intent{ flg=0x34000000 cmp=com. мое приложение /.nfc_scan} И все... Ни о каких тагах там и речи нет, в чем прикол?

Добавлено через 2 часа 15 минут
Перекинул новый код на Redmi 9 (10 Android) - Он также перестал читать......
И тут я вспомнил, что все проблемы начались вот с этого куска!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 @Override
    protected void onCreate(Bundle savedInstanceState) {
 
   mNfcPendingIntent = PendingIntent.getActivity(nfc_scan.this,
                        0, new Intent(nfc_scan.this, nfc_scan.class)
                                .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
 
На Redmi 9 (10 Android)  - этот кусок работает нормально! 
А вот на 12-м Андройде приложение сразу вылетает....  
И этот кусок с пэндингом я заменил на 
эту функцию... Вылетать из программы перестало, НО тут начались проблемы с чтением карт.... 
Я думаю все из-за переделки  "PendingIntent"
 
 
////// новая функция....
private void createPendingIntent() {
if (mNfcPendingIntent == null) {
         Activity activity = nfc_scan.this;
         Intent intent = new Intent(activity, activity.getClass());
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
             intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
             mNfcPendingIntent = PendingIntent.getActivity(activity, 0, intent, PendingIntent.FLAG_IMMUTABLE);
         } else {
             intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
             mNfcPendingIntent = PendingIntent.getActivity(activity, 0, intent, 0);
         }
     }
Может кто сказать, что не так с этими двумя "PendingIntent", что бы на обоих версиях андройда работало....

Добавлено через 27 минут
Решение нашел сам. Если кому интересно:

PendingIntent.FLAG_IMMUTABLE - не разрешает менять запрос интента... (То есть прочесть дальше мы просто не можем, как я понял)
Но без этого флага Андройд выше 10-ки не работает.... Альтернатива - поставил флаг "PendingIntent.FLAG_MUTABLE"

Итог: ИЗ-ЗА единственного флага, сломался весь процесс!
0
07.12.2022, 15:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2022, 15:50
Помогаю со студенческими работами здесь

Windows 7 не читает некоторые диски. Файловая система UDFR 1.02 Файлы видет, но не читает
Здравствуйте. у меня странная проблема с чтением дисков blu-ray и DVD. тут опишу про blu-ray, но с...

USBasp неправильно читает Flash, но правильно читает EEprom
Ребята выручайте, нужен мозговой штурм... Пару лет назад собрал USBasp, до недавнего времени...

Выяснить, какой день сын читает книгу, если сейчас Миша читает k-ую страницу книги.
Миша иногда читал книги. Но и это он делал странным способом: начинал он всегда с первой страницы и...

Дисковод в Ubuntu не читает DVD, но однако читает CD
Доброго всем времени суток! Решили перейти на Ubuntu и столкнулись с проблемой: дисковод не видит...

Дисковод читает аудиофайлы, а DVD-диски не читает
Всем привет! Дисковод читает аудиофайлы а DVD-диски не читает! Может какой драйвер надо!!!!...

Программа читает нажатия на клавиши F1, F2,F3,F4,....F10 и выполняет действия F1-F9 выводит на экран 9 разных изречений F10 чистит экран (использовать
Программа читает нажатия на клавиши F1, F2,F3,F4,....F10 и выполняет действия F1-F9 выводит на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru