如何在不扩展活动的类中访问android中的振动器?

时间:2014-03-14 18:51:42

标签: java android android-vibration

我正在尝试使用名为VibrationManager的类中的以下内容访问振动器,并且该类未扩展活动

Vibrator v =(Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

但eclipse会抛出错误,如

对于类型VibrationManager

,方法getSystemService(String)未定义

这是我的整个班级

public class VibrationManager {

private static VibrationManager me = null;

Vibrator v = null;

private Vibrator getVibrator(){
    if(v == null){
        v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    }
    return v;
}

public static VibrationManager getManager() {
    if(me == null){
        me = new VibrationManager();
    }
    return me;
}

public void vibrate(long[] pattern){

}

}

请帮忙

2 个答案:

答案 0 :(得分:2)

您的课程没有getSystemService方法,因为此课程不会延长Activity

如果您不想使用getSystemService方法,则需要您的课程VibrationManager来扩展某项活动,或者您需要获得该活动的上下文。

只需更改代码即可使用上下文,因此您还需要在静态调用中获取上下文。

public class VibrationManager {

    private static VibrationManager me;
    private Context context;

    Vibrator v = null;

    private Vibrator getVibrator(){
        if(v == null){
            v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        }
        return v;
    }

    public static VibrationManager getManager(Context context) {
        if(me == null){
            me = new VibrationManager();
        }
        me.setContext(context);
        return me;
    }

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

    public void vibrate(long[] pattern){

    }
}

答案 1 :(得分:1)

如果从不同的视图访问上下文时遇到问题,可以执行以下操作:

  • 创建一个扩展Application的类(例如MyApplication)

  • 将清单中的类声明为Application类,如下所示:

     <application
       android:name="your.project.package.MyApplication"
       ...
    
  • 默认情况下,应用程序类是单例,但您需要创建一个getInstance方法,如下所示:

    public class MyApplication extends Application {
    
        private static MyApplication instance;
    
        public void onCreate() {
            instance = this;
        }
    
        public static MyApplication getInstance() {
            return instance;
        }
    }
    

完成后,您可以从应用中的任何位置访问上下文,而无需传递如下多个引用:

MyApplication app = MyApplication.getInstance()
Vibrator v = (Vibrator) app.getSystemService(Context.VIBRATOR_SERVICE);

你去了,你不仅可以打电话给振动器服务,还可以打电话给你想要的任何服务......