मेरा एप्लिकेशन बीएलई उपकरणों के लिए स्कैन करता है, जबकि यह पृष्ठभूमि में है ताकि उपयोगकर्ता को सूचनाएं भेजी जा सकें यदि डिवाइस विज्ञापन बंद कर देते हैं या उनका आरएसएसआई एक निर्धारित सीमा से नीचे चला जाता है।

हालांकि, मैंने जो देखा है वह यह है कि भले ही मेरा ऐप बंद हो और अब पृष्ठभूमि में न हो, मेरा एप्लिकेशन कभी-कभी बीएलई उपकरणों के लिए स्कैन करेगा। मैं इसे कैसे बना सकता हूं ताकि ये पृष्ठभूमि बीएलई स्कैन पृष्ठभूमि में तभी हों जब मेरा ऐप जीवित हो और पृष्ठभूमि में हो?

मैं वर्तमान में ऑनस्ट्रोय कॉलबैक में स्कैन अक्षम कर रहा हूं लेकिन मैंने पढ़ा है कि इसकी अनुशंसा नहीं की जाती है क्योंकि वहां कोड हमेशा निष्पादित नहीं होता है। यही कारण है कि मेरा एप्लिकेशन अभी भी कभी-कभी पृष्ठभूमि में स्कैन करेगा।

नीचे ऑनडेस्ट्रॉय कॉलबैक और कोड है जिसका उपयोग मैं स्कैन शुरू या बंद करने के लिए करता हूं।

@Override
public void onDestroy() {
    super.onDestroy();
    scanLeDevice(false); //stop scanning and stop notification from showing when app closed
    try {
        unregisterReceiver(mReceiverOn);
        unregisterReceiver(mReceiverOff);
        //Register or UnRegister your broadcast receiver here

    } catch(IllegalArgumentException e) {

        e.printStackTrace();
    }
    stopService();
    Log.d("lifecycle", "onDestroy: isAppRunning in on destroy");
}

 private void scanLeDevice(final boolean enable) { //need to update to non deprecated code
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && PackageManager.PERMISSION_GRANTED != getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION))
    {
        Toast.makeText(DeviceScanActivity.this, R.string.location_permission_needed, Toast.LENGTH_SHORT).show();
        requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 9); //get fine location, needed for android 10
    }
    else if (enable && !scanRunning) { //starting a scan that is currently not running
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() { //Stops scanning after a pre-defined scan period. This is required if you are to scan indefinitely
                mBluetoothAdapter.stopLeScan(mLeScanCallback );
                scanRunning = false;
                if(mScanning)
                    mHandler2.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            scanLeDevice(true);
                        }
                    }, 650);
                invalidateOptionsMenu();
            }
        }, 8000);
        mScanning = true;
        scanRunning = true;
        boolean onScanner = mBluetoothAdapter.startLeScan(uuid, mLeScanCallback);
        Log.d(TAG, "scanLeDevice: onScanner " + onScanner + " isDiscovering " + mBluetoothAdapter.isDiscovering());
    } else if (enable && appNotDestroyed){ //scanRunning is true
        mScanning = true;
        mBluetoothAdapter.startLeScan(uuid, mLeScanCallback);
        Log.d(TAG, "scanLeDevice: mScanning " + mScanning + " isDiscovering " + mBluetoothAdapter.isDiscovering());
    } else { //enable is false
        mScanning = false;
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
        if(!clearHandlerHasRunnable) {
            clearHandlerHasRunnable = true;
            clearHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (!mScanning)
                        clearUnsavedDevices(mLeDevices);
                    clearHandlerHasRunnable = false;
                }
            }, 3000);
        }
    }
    invalidateOptionsMenu();
    if(!mScanning){ //clear indicators for all cells so that user isn't confused by certain indicators being on/off
        for (int i = 0; i < mLeDevices.size(); i++){
            updateViewScanFor(i);
        }
    }
}
1
pgs1 28 अक्टूबर 2020, 23:29

1 उत्तर

सबसे बढ़िया उत्तर

मैं अब अपने ऑन पॉज़() में पृष्ठभूमि स्कैन शुरू नहीं कर रहा हूं और फिर इसे अपनी मुख्य गतिविधि में ऑनस्ट्रोय() में रोक रहा हूं।

इसके बजाय, मैं एक अग्रभूमि सेवा शुरू कर रहा हूं जिसमें मेरी स्कैनिंग होती है। यह मेरे ऐप को सेवा को रोकने की अनुमति देता है, और इसलिए स्कैनिंग, जब मेरा ऐप नष्ट हो जाता है क्योंकि पृष्ठभूमि में कुछ भी नहीं हो रहा है।

0
pgs1 25 नवम्बर 2020, 14:26