7

Android アプリケーションにセンサーを使用しています。次のコード行でセンサーを登録します。

mySensorManager.registerListener(this, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);

リスナーの登録を解除するためのコード行を導入したので、常に実行されることはありません。

mySensorManager.unregisterListener(this);

これまでのところ機能していますが、アプリケーションが再開したら再度登録する必要があります。私の sensorManager に登録済みのリスナーがあるかどうかを知る必要があるので、再登録するか、それをスキットできます。このようなことはできますか?:

if (mySensorManager.getRegisteredListenerList == null){ registerListener() } else { .. }
4

2 に答える 2

8

私の知る限り、すでにリスナーを登録しているかどうかを確認するネイティブな方法はありません。このチェックは Android によって既に行われているため、このチェックについてあまり心配する必要はありません。したがって、すでにリスナーを登録している場合、Android は同じリスナーを 2 回追加することはありません。

@SuppressWarnings("deprecation")
private boolean registerLegacyListener(int legacyType, int type,
        SensorListener listener, int sensors, int rate)
    {
        if (listener == null) {
            return false;
        }
        boolean result = false;
        // Are we activating this legacy sensor?
        if ((sensors & legacyType) != 0) {
            // if so, find a suitable Sensor
            Sensor sensor = getDefaultSensor(type);
            if (sensor != null) {
                // If we don't already have one, create a LegacyListener
                // to wrap this listener and process the events as
                // they are expected by legacy apps.
                LegacyListener legacyListener = null;
                synchronized (mLegacyListenersMap) {
                    legacyListener = mLegacyListenersMap.get(listener);
                    if (legacyListener == null) {
                        // we didn't find a LegacyListener for this client,
                        // create one, and put it in our list.
                        legacyListener = new LegacyListener(listener);
                        mLegacyListenersMap.put(listener, legacyListener);
                    }
                }
                // register this legacy sensor with this legacy listener
                legacyListener.registerSensor(legacyType);
                // and finally, register the legacy listener with the new apis
                result = registerListener(legacyListener, sensor, rate);
            }
        }
        return result;
    }

したがって、 registerListener を必要なだけ呼び出すことができ、一度だけ追加されます:)

登録解除ロジックにも同じことが適用されます

于 2013-01-11T01:37:47.177 に答える