如何给非活动类提供振动许可?

时间:2014-07-01 09:56:09

标签: android customization vibration

我使用this previous thread中建议的策略在非活动类中创建自定义振动器。

import android.content.Context;
import android.os.Vibrator;
public class IntensityVibrator {
    private static IntensityVibrator iv;
    private Vibrator vib= null;
    private Context context;
    private Vibrator getVibrator(){
        if(vib == null){
            vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        }
        return vib;
    }


    public static IntensityVibrator getManager(<an_activity> context) {
        if(iv == null){
            iv = new IntensityVibrator();
        }
        iv.setContext(context);
        return iv;
    }


    private void setContext(Context context){
        this.context = context;
    }

    public void regularVibrate(long millis){
    vib.vibrate(millis);
    }
    }

我在这样的方式中使用它:

vib = (IntensityVibrator) IntensityVibrator.getManager(<an_activity>);

我创建vib对象的类也是非活动类。因此,我通过an_activity上下文传递上下文。

应用程序崩溃了调用最后一个方法的时间。调试显示代码工作正常,直到调用vib.vibrate(millis)。你能猜出这里可能出现什么问题吗?

1 个答案:

答案 0 :(得分:2)

在我看来,您永远不会初始化您的vib类变量,因此它是null而您在调用NullPointerException时会得到regularVibrate 初始化getVibrator的私有vib方法永远不会被调用:您应该在调用getManager之后在setContext中调用它。