我正在尝试使用名为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){
}
}
请帮忙
答案 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);
你去了,你不仅可以打电话给振动器服务,还可以打电话给你想要的任何服务......