Перенос проекта на dagger2

359
18 февраля 2017, 05:28

Такой вопрос, в проекте я использую метод для проверки работы сервиса,я вынес его в отдельный класс с аннотацией @Module:

    @Module
    public class IsMyServiceRunning  {
        Context context;
        public IsMyServiceRunning(Class<?> serviceClass,Context context) {
            isMyServiceRunnin(serviceClass);
            this.context = context;
        }

        public boolean isMyServiceRunnin(Class<?> serviceClass) {

            ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
            for (ActivityManager.RunningServiceInfo service : manager
                    .getRunningServices(Integer.MAX_VALUE)) {
                if (serviceClass.getName().equals(service.service.getClassName())) {
                    return true;
                }
            }
            return false;

        }
}

в главной активити я пишу:

public class MainActivity extends Activity implements SurfaceHolder.Callback {
@Inject
IsMyServiceRunning isMyServiceRunning;

Создал класс

 @Module
public class AndroidModule {
    Context context;
    public AndroidModule(Context context) {
        this.context = context;
    }
    @SuppressLint("ServiceCast")
    @Provides
    @Singleton
    NotificationManagerCompat manager (Context context) {
        return (NotificationManagerCompat) context.getSystemService(Context.NOTIFICATION_SERVICE);
    }

    @Singleton
    IsMyServiceRunning isMyServiceRunning(Context context){
        return ;//не знаю как правильно возвращать,а главное что именно
    }
}

Проверить работоспособность на данном этапе не могу т.к много частей не реализовано, вот и уточняю, правильно ли использую Dependency Injection вот на этом примере? все ли я реализовал ?

UPDATE:

 @Module
public class IsMyServiceRunning  {
    Context context;
    public IsMyServiceRunning(Context context) {
        this.context = context;
    }

    public boolean isMyServiceRunnin(Class<?> serviceClass) {

        ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager
                .getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;

    }
}

Module:

     @Module
    public class AndroidModule {
        Context context;
        public AndroidModule(Context context) {
            this.context = context;
        }
        @SuppressLint("ServiceCast")
        @Provides
        @Singleton
        NotificationManagerCompat manager (Context context) {
            return (NotificationManagerCompat) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
    @Singleton
    IsMyServiceRunning isMyServiceRunning(Class<?> serviceClass){
        return isMyServiceRunning(serviceClass);
    }
}

Mainactivity:

 @Inject
IsMyServiceRunning isMyServiceRunning;
Answer 1

В терминологии даггера есть такие понятия как компонент и модуль.

Модуль это та часть, которая отвечает за создание объектов, которые требует тот или иной компонент приложения.

Компонент это некоторый мост между модулями и классами которые требуют те или иные зависимости.

Исходя из этого вам необходимо создать модуль:

@Module
public class AndroidModule {
    private final Context context;
    public AndroidModule(Context context) {
        this.context = context;
    }
    @Singleton
    @Provide
    IsMyServiceRunning isMyServiceRunning(){
        return new IsMyServiceRunning(context);
    }
    // остальной код создания нужных объектов
}

Компонент:

@Component(modules = AndroidModule.class)
@Singleton
public interface ApplicationComponent {
    void inject(MainActivity activity)
}

И дальше уже в activity можно попросить даггер предоставить необходимую зависимость:

public class MainActivity extends Activity implements SurfaceHolder.Callback {
    @Inject
    IsMyServiceRunning isMyServiceRunning;
    public void onCreate(Bundle savedInstanse) {
        super.onCreate(savedInstance);
        ApplicationComponent component = // где то инитим и получаем компонент
        component.inject(this);
    }
}

Вообще уже написано достаточное количество статей по даггеру на том же самом хабре, советую ознакомиться.

READ ALSO
Java chat app video streaming

Java chat app video streaming

Всем привет! У меня есть мини Джава чат с клиентом и серверомДело в том что я хочу добавить туда видео стриминг(вебинар) и аудио а сам понятия...

282
Делится ли число введенное с клавиатуры на его составляющие цифры [требует правки]

Делится ли число введенное с клавиатуры на его составляющие цифры [требует правки]

Делится ли число введенное с клавиатуры на его составляющие цифры?

296
Проблема с bootstrap tab + ajax

Проблема с bootstrap tab + ajax

Здравствуйте

357
CSS радиальное меню

CSS радиальное меню

Что я хочу сделать:

721