0

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

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

但日食抛出和错误喜欢

类型 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){

}

}

请帮忙

4

2 回答 2

2

您的类没有该方法getSystemService,因为此类不扩展 a 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){

    }
}
于 2014-03-14T19:03:11.217 回答
1

如果您在从不同视图访问上下文时遇到问题,您可以这样做:

  • 创建一个扩展应用程序的类(例如 MyApplication)

  • 在您的清单中将该类声明为您的应用程序类,如下所示:

     <application
       android:name="your.project.package.MyApplication"
       ...
    
  • Application 类默认是单例的,但是你需要创建一个 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);

好了,您不仅可以调用振动器服务,还可以调用任何您想要的服务......

于 2014-03-14T19:11:39.210 回答