如何在不扩展活动的类中访问 android 中的振动器?[英] How to access vibrator in android in a class that is not extending activity?

问题描述

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

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

}

}

请帮忙

推荐答案

你的类没有方法 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){

    }
}

其他推荐答案

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

  • 创建一个扩展应用程序的类(例如 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);

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

查看更多