Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
1

Обработка NFC в запущенной Activity

17.01.2017, 14:13. Просмотров 1062. Ответов 4

Доброго времени суток.
Программа для чтения и записи NFC меток.
Когда телефон подношу к NFC устройству телефон предлагает список программ для чтения. Причём независимо от того запущено моё приложение или нет.
Как телефону объяснить, что если приложение уже запущено - не надо заново предлагать на выбор программы для работы с меткой?
Манифест:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="aaa.nfctest">
    <uses-sdk android:minSdkVersion="10"/>
    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity" android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                       android:resource="@xml/nfc_tech_filter" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version"/>
    </application>
</manifest>
На этапе прототипа весь код небольшой и находится в onCreate:
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
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tInfo = (TextView) findViewById(R.id.tInfo);
 
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.NFC))
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.NFC}, 1);
 
        doButton = (Button) findViewById(R.id.DoButton);
        doButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = getIntent();
                tInfo.setText(i.getAction());
                if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(i.getAction()))
                {
                    tagFromIntent = i.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                    //byte[] GetSystemInfoFrame = new byte[] { (byte) 0x0A, (byte) 0x2B };
                    byte[] setConfigByte = new byte[] {(byte)0x02, (byte)0xA4, (byte)0x02, (byte)0xFC};
                    byte[] getConfigByte = new byte[] {(byte)0x02, (byte)0xA0, (byte)0x02};
                    NfcV nfcv = NfcV.get(tagFromIntent);
                    try {
                        nfcv.close();
                        nfcv.connect();
                       // byte[] answ = nfcv.transceive(setConfigByte);
                        byte[] conf = nfcv.transceive(getConfigByte);
                        nfcv.close();
                    }
                    catch (IOException e) {
                        tInfo.setText(e.getMessage());
                    }
 
                }
            }
        });
        adapter = NfcAdapter.getDefaultAdapter(this);
        if (adapter == null) {
            tInfo.setText("Null adapter");
            finish();
        }
        if (adapter.isEnabled() == false) {
            tInfo.setText("Adapter is Off");
            finish();
        }
        Intent i = getIntent();
        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(i.getAction())) {
            tagFromIntent = i.getParcelableExtra(NfcAdapter.EXTRA_TAG);
            tInfo.setText(tagFromIntent.getId().toString());
        }
        mClient = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2017, 14:13
Ответы с готовыми решениями:

Обработка onTouchEvent в Activity
Хочу в активити обрабатывать все прикосновения, независимого от того, были ли они на кнопке или на...

Обработка нажатия Radiogroup и Spinner на Activity
В рамках activity имеется RadioGroup и Spinner, посредством которых выполняются некоторые...

Обработка FloatingActionButton в классе не наследующим класс Activity
Доброго времени суток. Пишу проект и столкнулся с такой проблемой. В своём приложении использую...

Обработка нажатий клавиш громкости непосредственно Service (Activity уже закрыто)
Уважаемые форумчане! Буду благодарен за любую помощь. Написал добрую часть приложения для...

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было...

4
Pablito
2863 / 2275 / 768
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
17.01.2017, 14:34 2
это должен решать пользователь, а не твоя программа
вдруг он хочет работать с другой программой
0
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
17.01.2017, 14:36  [ТС] 3
Паблито, если программа УЖЕ открыта - зачем снова спрашивать чем читать? У меня, кстати, установленно ещё 2 программы чтения NFC меток. Когда они запущены ОС не спрашивает чем читать.
0
Pablito
2863 / 2275 / 768
Регистрация: 12.05.2014
Сообщений: 7,978
Завершенные тесты: 1
17.01.2017, 14:41 4
тогда я бы попробовал переопределить метод в активити onNewIntent
и поставить там вывод в лог что бы убедиться - вызывается этот метод или нет (когда программа открыта и активна)
0
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
18.01.2017, 13:03  [ТС] 5
Паблито, onNewIntent есть (кстати, срабатывает, только, если стоит android:launchMode="singleInstance"). Но всё-равно, ОС предлагает список программ, если моё запущено.

Добавлено через 1 минуту
Java
1
2
3
4
5
6
7
8
    @Override
    protected void onNewIntent(Intent i) {
        super.onNewIntent(i);
        tInfo.setText(i.getAction());
        if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(i.getAction())) {
            tagFromIntent = i.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        }
    }
Добавлено через 22 часа 17 минут
Проблему решил. Спасло Foreground Dispatch System
0
18.01.2017, 13:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 13:03

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в activity1 из галереи ...

Android - Передача данных с одного Activity на другое Activity
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном...

Изменение layout-элементов одного activity из другого activity
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.