Android Studio中Java代码getSystemService标红,点击选项震动功能失效
解决Android中getSystemService标红问题
问题原因
你在匿名OnClickListener内部类里直接调用getSystemService(),此时调用上下文是OnClickListener实例,而非你的Activity/Context对象,IDE无法识别正确的Context引用,因此标红。
解决方案
有两种简单修复方式:
方式1:通过点击事件的View获取Context
利用onClick方法传入的view对象获取Context:
@Override public void onClick(View view){ Vibrator vibrator = (Vibrator) view.getContext().getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(400); }
方式2:使用外部类的Context实例
如果这个方法写在Activity类中,直接用Activity类名加.this来指定Context(比如你的Activity叫MainActivity):
@Override public void onClick(View view){ Vibrator vibrator = (Vibrator) MainActivity.this.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(400); }
额外注意事项
- 确认已在
AndroidManifest.xml中添加振动权限:
<uses-permission android:name="android.permission.VIBRATE" />
- Android 6.0(API 23)及以上版本中,振动权限属于普通权限无需动态申请,若后续振动不生效,可排查是否存在其他代码逻辑冲突。
内容的提问来源于stack exchange,提问作者Myungwon Lee
相关产品推荐
相关产品推荐

