Использовать активность NF C из другого класса - PullRequest
0 голосов
/ 06 мая 2020

Я создал новый класс для тегов nf c, потому что мне приходится использовать функцию nf c в различных действиях. Проверка доступности функции nf c работает. Я реализовал функцию обнаружения тега nf c в методах onNewIntent и onResume. Как я могу использовать эту функцию в моем классе OrderActivity.java или в других моих действиях? С нетерпением жду ваших ответов.

NFCReaderWriter. java

import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.nfc.NfcAdapter;
import android.widget.Toast;

import androidx.appcompat.app.ActionBar;

public class NFCReaderWriter extends Activity {

    private Context context;
    private NfcAdapter nfcAdapter;

    public NFCReaderWriter(Context context) {
        this.context = context;
        nfcAdapter = NfcAdapter.getDefaultAdapter(context);
    }

    /**
     * Checks for nfc functionality
     * @return boolean the status of the functionality
     */
    public boolean checkFunctionality(){
        if(nfcAdapter != null && nfcAdapter.isEnabled()) {
            return true;
        }
        else {
            return false;
        }

    }

    @Override
    protected void onNewIntent(Intent intent) {
        Toast.makeText(context, "NFC intent received", Toast.LENGTH_LONG).show();
        super.onNewIntent(intent);
    }

    @Override
    protected void onResume() {
        Intent intent = new Intent(context, context.getClass());
        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        IntentFilter[] intentFilters = new IntentFilter[]{};

        nfcAdapter.enableForegroundDispatch((Activity) context, pendingIntent, intentFilters, null);
        super.onResume();
    }

    @Override
    protected void onPause() {
        nfcAdapter.disableForegroundDispatch((Activity) context);
        super.onPause();
    }
}

OrderActivity. java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.Dialog;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.util.NumberUtils;
import com.google.firebase.auth.FirebaseAuth;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;

import static android.widget.Toast.*;

public class OrderActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);

        nfcReaderWriter = new NFCReaderWriter(this);
        if(nfcReaderWriter.checkFunctionality()) {
            System.out.println("works");
        }
        else {
            System.out.println("no nfc");
        }    
    }     
}

1 Ответ

0 голосов
/ 06 мая 2020

Звучит как стандартная проблема наследования Java.

Думаю, должно работать следующее: -

Изменить

public class NFCReaderWriter extends Activity {

на

public class NFCReaderWriter extends AppCompatActivity {

, а затем измените

public class OrderActivity extends AppCompatActivity {

на

public class OrderActivity extends NFCReaderWriter {

...