Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
1

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

17.01.2017, 14:13. Показов 3180. Ответов 4

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Программа для чтения и записи 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2017, 14:13
Ответы с готовыми решениями:

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

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

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

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

4
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.01.2017, 14:34 2
это должен решать пользователь, а не твоя программа
вдруг он хочет работать с другой программой
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
17.01.2017, 14:36  [ТС] 3
Паблито, если программа УЖЕ открыта - зачем снова спрашивать чем читать? У меня, кстати, установленно ещё 2 программы чтения NFC меток. Когда они запущены ОС не спрашивает чем читать.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
17.01.2017, 14:41 4
тогда я бы попробовал переопределить метод в активити onNewIntent
и поставить там вывод в лог что бы убедиться - вызывается этот метод или нет (когда программа открыта и активна)
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2017, 13:03
Помогаю со студенческими работами здесь

При открытие activity одного приложения предлагает открыть activity другого
При открытие одного activity предлагает открыть activity другого. Package у них разный.

Как изменить кнопку на втором Activity с первого Activity в Android Studio?
Общая задача сделать уровни для игры, по окончанию первого уровня, появляется кнопка &quot;выбор уровня&quot;...

Как в Android Studio изменять объект одного Activity из другого Activity?
Есть два Activity, в одном кнопка и элемент editText. Во втором activity есть элемент TextView....

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


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

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