Как сравнить uid nfc с базой данных csv (тег: Mifare DESFire: ISO14443-4: Type A, Isodep)Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как сравнить uid nfc с базой данных csv (тег: Mifare DESFire: ISO14443-4: Type A, Isodep)

Сообщение Anonymous »

Мое приложение запустилось, но ничего не произошло, когда я добавил тег nfc.
Цель обычно проста: поместить тег nfc, сравнить uid с базой данных csv.
Mifare DESFire: ISO14443-4: Тип A, Isode Tag содержит защищенные сертификаты, поскольку карта используется в компании, и единственным открытым объектом является UID.
mainactivity.kt :

Код: Выделить всё

package com.example.simplicims

import android.nfc.NfcAdapter
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.nfc.Tag
import android.nfc.tech.NfcA
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import java.io.BufferedReader
import java.io.File
import java.io.FileInputStream
import java.io.FileReader
import java.io.IOException
import java.io.InputStream
import org.apache.poi.ss.usermodel.WorkbookFactory

class MainActivity : Activity() {

private lateinit var nfcAdapter: NfcAdapter
private lateinit var uidTextView: TextView
private lateinit var statusTextView: TextView
private lateinit var scanButton: Button

private val validUids = mutableListOf()  // List to store valid UIDs from CSV

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

uidTextView = findViewById(R.id.uidTextView)
statusTextView = findViewById(R.id.statusTextView)
scanButton = findViewById(R.id.scanButton)

nfcAdapter = NfcAdapter.getDefaultAdapter(this)

// Check for permissions and load CSV file
checkPermissions()

scanButton.setOnClickListener {
// Trigger NFC scan manually if needed
// Optionally, start an activity for NFC scan manually
}
}

override fun onResume() {
super.onResume()
val nfcAdapter = NfcAdapter.getDefaultAdapter(this)

if (NfcAdapter.getDefaultAdapter(this) == null) {
statusTextView.text = "NFC non dispo"
return
} else {
if (nfcAdapter.isEnabled) {
Log.e("NFC", "NFC is disabled")
} else {
nfcAdapter.enableForegroundDispatch(this, null, null, null)
}
}
}

override fun onPause() {
super.onPause()
nfcAdapter.disableForegroundDispatch(this)
}

override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
if (NfcAdapter.ACTION_NDEF_DISCOVERED == intent?.action) {
val tag: Tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)!!
val uid = tag.id.joinToString("") { it.toString(16).padStart(2, '0') }
uidTextView.text = "UID: $uid"
checkUidInDatabase(uid)
}
}

private fun loadCsvDatabase() {
try {
val csvFile = File("/storage/emulated/0/Download/database.csv") // CSV file path
if (!csvFile.exists()) {
statusTextView.text = "CSV file not found"
return
}

val reader = BufferedReader(FileReader(csvFile))
var line: String?

while (reader.readLine().also { line = it } != null) {
// Assuming each line contains a single UID
val uid = line?.trim() // Remove any unnecessary whitespace
if (!uid.isNullOrEmpty()) {
validUids.add(uid)
}
}
reader.close()

} catch (e: IOException) {
statusTextView.text = "Error reading CSV file"
}
}

private fun checkUidInDatabase(uid:  String) {
if (validUids.contains(uid)) {
statusTextView.text = "Entrée autorisée"
statusTextView.setTextColor(getColor(android.R.color.holo_green_dark))
} else {
statusTextView.text = "Entrée non autorisée - voir CSB"
statusTextView.setTextColor(getColor(android.R.color.holo_red_dark))
}
}

// Check for permission to read external storage
private fun checkPermissions() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1)
} else {
// If permission is granted, load the CSV
loadCsvDatabase()
}
}

// Handle the result of permission request
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 1) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted, load the CSV
loadCsvDatabase()
} else {
// Permission denied, handle accordingly
statusTextView.text = "Permission denied to read external storage"
}
}
}
}
манифест: Я просто хочу поставить тег NFC и получить ответ «ОК» или «Нет» в зависимости от того, находится ли UID в базе данных.
Ничего больше, но каждый раз у меня ничего не получалось.
Я использую ИИ, потому что я не разработчик, даже пытаюсь понять некоторые вещи.

Подробнее здесь: https://stackoverflow.com/questions/792 ... 443-4-type
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сравнить uid nfc с базой данных csv (тег: Mifare DESFire: ISO14443-4: Type A, Isodep)
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Ошибка NS_ASSERT, cond="uid <= m_information.size() && uid != 0", msg="Uid 0 для этого TypeId недействителен"
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Получение UID RFID-метки Mifare Classic на телефоне Android через Kotlin
    Anonymous » » в форуме Android
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать значок Mifare, чтобы получить ключ UID, в Android Studio Java
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать значок Mifare, чтобы получить ключ UID, в Android Studio Java
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»