如何将自定义系统服务名称添加到@ServiceName StringDef?

时间:2015-02-04 12:31:35

标签: android android-studio android-lint

在我们的一些活动中,我们重写了getSystemService()方法,以返回自定义服务名称的一些自定义对象。它对我们很有效,可以将一些对象传递给某个深入到这个Activity内部的View。

但是在Android Studio中,我们会在一行中获取由lint检查生成的错误,以获取我们的自定义系统服务:

return (CustomService) context.getSystemService(SERVICE_NAME);

我知道lint在@ServiceName上使用getSystemService()注释,该注释是通过@StringDef类中的Context定义的。我想知道如何扩展此定义以包含我们的自定义服务名称。

每次我们使用自定义系统服务时,我都不想转换这个非常有用的检查,也不会抑制此错误。这就是为什么我希望可以为lint添加自定义名称以识别此调用是否正确。

1 个答案:

答案 0 :(得分:0)

public class SomeClass{

    public static final String SERVICE_1= "SERVICE_1";
    public static final String SERVICE_2= "SERVICE_2";
    public static final String SERVICE_3= "SERVICE_1";

    @StringDef({SERVICE_1, SERVICE_2, SERVICE_3})
    @Retention(RetentionPolicy.SOURCE)
    public @interface ServiceName{}

    ...

    public Object getService(@ServiceName String name){
        //Resolve service by string name
        ...
    }

}

使用@StringDef注释将以下依赖项添加到gradle构建文件

dependencies {
    compile 'com.android.support:support-annotations:23.1.1'
}

如需更多信息,请使用Support Annotations