मैं ऐसे एप्लिकेशन पर काम कर रहा हूं जहां मुझे एनएफसी टैग में संग्रहीत डेटा को पढ़ने की जरूरत है, डेटा का मतलब है कि यह सरल पूर्णांक मान 0,1,2,3 और इसी तरह है। जब एनएफसी से डेटा पढ़ने के लिए कार्य करता है तो यह गतिविधि वर्ग में ठीक काम करता है लेकिन मुझे पृष्ठभूमि में एप्लिकेशन चलाने की आवश्यकता होती है, भले ही एप्लिकेशन अग्रभूमि में नहीं चल रहा हो, मैं एनएफसी से डेटा पढ़ सकता हूं। इसलिए मैंने एक सेवा वर्ग लिखा और गतिविधि से गतिविधि कक्षा में स्थानांतरित कर दिया। लेकिन यह काम नहीं किया।
एंड्रॉइड: सर्विस क्लास में एनएफसी टैग पढ़ना
यह "MainActivity.java"
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startService(new Intent(this, MyService.class));
}
startService (नई आशय (यह, MyService.class)) है;
यह लाइन सेवा कक्षा शुरू करती है।
सेवा वर्ग "MyService.java"
public class MyService extends Service {
private NfcAdapter mNfcAdapter;
private PendingIntent mNfcPendingIntent;
private IntentFilter[] mReadTagFilters;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcPendingIntent = PendingIntent.getActivity(this, 0, new
Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP), 0);
IntentFilter ndefDetected = new IntentFilter(
NfcAdapter.ACTION_NDEF_DISCOVERED);
ndefDetected.addDataScheme("http");
IntentFilter techDetected = new IntentFilter(
NfcAdapter.ACTION_TECH_DISCOVERED);
mReadTagFilters = new IntentFilter[] { ndefDetected, techDetected };
Log.v("service", "return from onCreate function");
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.v("service", "onStart function");
if (mNfcAdapter != null) {
if (!mNfcAdapter.isEnabled()) {
new AlertDialog.Builder(this)
.setTitle("NFC Dialog")
.setMessage("Please switch on NFC")
.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0,
int arg1) {
Intent setnfc = new Intent(
Settings.ACTION_WIRELESS_SETTINGS);
startActivity(setnfc);
}
})
.setOnCancelListener(
new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
dialog.dismiss();
}
}).create().show();
}
mNfcAdapter.enableForegroundDispatch (MainActivity.mContext, mNfcPendingIntent,
mReadTagFilters, null);
} else {
Toast.makeText(this,
"Sorry, NFC adapter not available on your device.",
Toast.LENGTH_SHORT).show();
}
Log.v("service", "return fonStart function");
}
}
इस OnCreate() समारोह ठीक चल रहा है में है। समस्या इस लाइन है:
mNfcAdapter.enableForegroundDispatch (mContext, mNfcPendingIntent,
mReadTagFilters, null);
समारोह के पहले तर्क एक गतिविधि के संदर्भ स्वीकार करता है और यह वह जगह है जहाँ मैं अटक कर रहा हूँ। क्या इस या किसी भी विकल्प को हल करने का कोई तरीका है। आपके सहयोग के लिए धन्यवाद।
आपके उत्तर के लिए धन्यवाद लेकिन क्या आप सुझाव दे सकते हैं कि पृष्ठभूमि में चलते समय डिफ़ॉल्ट एंड्रॉइड एनएफसी टैग कैसे पढ़ता है और ब्राउज़र के साथ डेटा खोलने का प्रयास करता है? –
एनएफसी टैग पहचान एनएफसी सिस्टम सेवा द्वारा संभाला जाता है। सिस्टम सेवा तब इरादों के आधार पर ** गतिविधियों ** को सूचित करती है। वेब ब्राउज़र, एनएफसी कार्यक्रमों को प्राप्त करने के लिए अन्य गतिविधियों की तरह, उन उद्देश्यों के लिए पंजीकृत इरादे फ़िल्टर हैं। –