NFC Reader не работает в моем приложении в студии AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 NFC Reader не работает в моем приложении в студии Android

Сообщение Anonymous »

Я уже несколько дней пытаюсь создать устройство чтения и записи тегов NFC в Android Studio, я задавал вопрос в другой раз, но не вижу вопроса, поэтому повторяю с некоторыми изменениями. Я следую руководству по этому новому коду, но не могу заставить его работать ни во фрагментах моего приложения, ни в обычной MainActivity. Странно то, что ни чтение, ни запись на карту не выполняются должным образом, но если я выйду из приложения и прочитаю тег NFC, то когда я получу приглашение Android прочитать тег, мое приложение откроется с текстом тега NFC. он должен показать мне 'write("PlainText|" + edit_message.getText().toString(), myTag);' но он показывает мне «nfc_contents.setText («Содержимое карты NFC:» + текст);
» теперь я показываю вам весь код. Кроме того, он показывает мне эту ошибку в logcat каждый раз, когда я читаю карту NFC 2024 -05-04 20:09:41.404 2573-2702 ActivityStarterImpl system_server E Ошибка: класс активности {com.alfonso.nfcplay/com.alfonso.nfcplay.ui.read.ReadFragment} не существует, как если бы он искал пакет внутри того же пакета.
Ну и код:
'''

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

`package com.alfonso.nfcplay.ui.read;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import com.alfonso.nfcplay.R;
import com.alfonso.nfcplay.databinding.FragmentReadBinding;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Objects;

public class ReadFragment extends Fragment {

public static final String ErrorDetected="No NFC Tag Detected";
public static final String WriteSuccess="Text Written Succesfully";
public static final String WriteError="Error during writing, Try again!";
PendingIntent pendingIntent;
IntentFilter[] writingTagFilters;
boolean writeMode;
Tag myTag;
TextView edit_message;
TextView nfc_contents;
Button ActivateButton;
NfcAdapter nfcAdapter;
FragmentReadBinding binding;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = FragmentReadBinding.inflate(inflater, container, false);
View root = binding.getRoot();
edit_message= root.findViewById(R.id.edit_message);
nfc_contents= root.findViewById(R.id.nfc_contents);
ActivateButton = root.findViewById(R.id.ActivateButton);

ActivateButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
try {
readFromIntent(requireActivity().getIntent());
if(myTag == null){
Toast.makeText(requireContext(),ErrorDetected,Toast.LENGTH_SHORT).show();
} else {
write("PlainText|"  + edit_message.getText().toString(), myTag);
Toast.makeText(requireContext(), WriteSuccess, Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
throw new RuntimeException(e);
}

}
});

NfcManager nfcManager = (NfcManager) requireContext().getSystemService(Context.NFC_SERVICE);
nfcAdapter = nfcManager.getDefaultAdapter();
if (nfcAdapter != null) {
// Check NFC enabled
if (!nfcAdapter.isEnabled()) {
Toast.makeText(requireContext(), "Por favor, activa el NFC para leer tarjetas", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(requireContext(), "Este dispositivo no soporta NFC", Toast.LENGTH_SHORT).show();
}

readFromIntent(requireActivity().getIntent());
pendingIntent = PendingIntent.getActivity(requireContext(),0, new Intent(getActivity(), getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), PendingIntent.FLAG_IMMUTABLE);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
writingTagFilters = new IntentFilter[]{tagDetected};

ReadViewModel readViewModel = new ViewModelProvider(this).get(ReadViewModel.class);

final TextView textView = binding.Read;
readViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);

return root;
}

public void readFromIntent(Intent intent){
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)){
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs = null;
if (rawMsgs!= null){
msgs = new NdefMessage[rawMsgs.length];
for (int i=0; i

Подробнее здесь: [url]https://stackoverflow.com/questions/78430049/nfc-reader-not-working-in-my-app-in-android-studio[/url]
Ответить

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

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

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

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

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