Java 如何使用匕首2注入外星玩家
我有一个android应用程序,我想用dagger2实现exoplayer。 目前,我为exoPlayer提供了以下示例: 为了 我打算用黄油刀 为了 如何使用Dagger将这些变量注入到我的活动中? 提前谢谢Java 如何使用匕首2注入外星玩家,java,android,dagger-2,Java,Android,Dagger 2,我有一个android应用程序,我想用dagger2实现exoplayer。 目前,我为exoPlayer提供了以下示例: 为了 我打算用黄油刀 为了 如何使用Dagger将这些变量注入到我的活动中? 提前谢谢 问候对于那些只喜欢抱怨和否决投票的人,下面是如何使用exoPlayer with dagger2,欢迎您: 模块: import android.content.Context; import android.net.Uri; import android.os.Handler; i
问候对于那些只喜欢抱怨和否决投票的人,下面是如何使用exoPlayer with dagger2,欢迎您: 模块:
import android.content.Context;
import android.net.Uri;
import android.os.Handler;
import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveVideoTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import com.google.android.exoplayer2.util.Util;
import dagger.Module;
import dagger.Provides;
@Module
public class ExoPlayerModule {
private final Context context;
private String videoUri;
public ExoPlayerModule (Context context, String videoUri) {
this.context = context;
this.videoUri = videoUri;
}
@Provides //scope is not necessary for parameters stored within the module
public Context context() {
return context;
}
@Provides
public Handler provideMoviesClient() {
Handler handler = new Handler();
return handler;
}
@Provides
public DefaultBandwidthMeter providesDefaultBandwidthMeter() {
DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
return bandwidthMeter;
}
// Create player
@Provides
public TrackSelection.Factory providesVideoTrackSelection(DefaultBandwidthMeter bandwidthMeter) {
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter);
return videoTrackSelectionFactory;
}
@Provides
public TrackSelector providesTrackSelector(TrackSelection.Factory videoTrackSelectionFactory) {
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
return trackSelector;
}
@Provides
public LoadControl providesLoadControl() {
LoadControl loadControl = new DefaultLoadControl();
return loadControl;
}
@Provides
public SimpleExoPlayer providesExoPlayer(
Context context, TrackSelector trackSelector, LoadControl loadControl) {
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
return player;
}
// Prepare player
@Provides
public String providesUserAgent(Context context) {
return Util.getUserAgent(context, "AppName");
}
@Provides
public HttpDataSource.Factory providesHttpDataSource(
String userAgent, DefaultBandwidthMeter bandwidthMeter) {
return new DefaultHttpDataSourceFactory(userAgent, bandwidthMeter);
}
@Provides
public DataSource.Factory providesDataSource(
Context context, DefaultBandwidthMeter bandwidthMeter, HttpDataSource.Factory httpDataSource) {
return new DefaultDataSourceFactory(context, bandwidthMeter, httpDataSource);
}
@Provides
public MediaSource providesMediaSource(DataSource.Factory dataSourceFactory, Handler mainHandler) {
Uri uri = Uri.parse(videoUri);
return new ExtractorMediaSource(uri, dataSourceFactory, new DefaultExtractorsFactory(), mainHandler, null);
}
}
以下是组件:
@Module
public class ApplicationModule {
private MvvmApplication application;
public ApplicationModule(MvvmApplication application) {
this.application = application;
}
}
最后是活动:
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import com.example.movies.R;
import com.example.movies.dependencyinjection.DaggerPlayerActivityComponent;
import com.example.movies.dependencyinjection.PlayerActivityComponent;
import com.example.movies.dependencyinjection.module.ExoPlayerModule;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import javax.inject.Inject;
@EActivity(R.layout.activity_player)
public class PlayerActivity extends AppCompatActivity {
private PlayerActivityComponent component;
@Inject
Handler handler;
@Inject
DefaultBandwidthMeter bandwidthMeter;
@ViewById(R.id.mainSimpleExoPlayer)
SimpleExoPlayerView simpleExoPlayerView;
// Create player
@Inject
TrackSelection.Factory videoTrackSelectionFactory;
@Inject
TrackSelector trackSelector;
@Inject
LoadControl loadControl;
@Inject
SimpleExoPlayer player;
// Prepare player
@Inject
String userAgent;
@Inject
HttpDataSource.Factory httpDataSourceFactory;
@Inject
DataSource.Factory dataSourceFactory;
@Inject
MediaSource videoSource;
// Not injectable
public Uri uri;
private static final String VIDEO_URI =
"http://techslides.com/demos/sample-videos/small.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
component =
DaggerPlayerActivityComponent
.builder()
.exoPlayerModule(new ExoPlayerModule(PlayerActivity.this, VIDEO_URI))
.build();
component.inject(this);
}
@AfterViews
void init() {
attachPlayerView();
preparePlayer();
}
// Set player to SimpleExoPlayerView
public void attachPlayerView() {
simpleExoPlayerView.setPlayer(player);
}
public void preparePlayer() {
player.prepare(videoSource);
}
// Activity onStop, player must be release because of memory saving
@Override
public void onStop(){
super.onStop();
player.release();
}
}
有很多不同的方法来设置Dagger,如何使用组件,等等。我们不能为您这样做,一个简单的示例来强调如何可能对您毫无用处。您应该尝试阅读官方指南和一些教程,只有在遇到无法修复的特定问题或错误时才在此处提问。
@Module
public class ApplicationModule {
private MvvmApplication application;
public ApplicationModule(MvvmApplication application) {
this.application = application;
}
}
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import com.example.movies.R;
import com.example.movies.dependencyinjection.DaggerPlayerActivityComponent;
import com.example.movies.dependencyinjection.PlayerActivityComponent;
import com.example.movies.dependencyinjection.module.ExoPlayerModule;
import com.google.android.exoplayer2.LoadControl;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.SimpleExoPlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.HttpDataSource;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;
import javax.inject.Inject;
@EActivity(R.layout.activity_player)
public class PlayerActivity extends AppCompatActivity {
private PlayerActivityComponent component;
@Inject
Handler handler;
@Inject
DefaultBandwidthMeter bandwidthMeter;
@ViewById(R.id.mainSimpleExoPlayer)
SimpleExoPlayerView simpleExoPlayerView;
// Create player
@Inject
TrackSelection.Factory videoTrackSelectionFactory;
@Inject
TrackSelector trackSelector;
@Inject
LoadControl loadControl;
@Inject
SimpleExoPlayer player;
// Prepare player
@Inject
String userAgent;
@Inject
HttpDataSource.Factory httpDataSourceFactory;
@Inject
DataSource.Factory dataSourceFactory;
@Inject
MediaSource videoSource;
// Not injectable
public Uri uri;
private static final String VIDEO_URI =
"http://techslides.com/demos/sample-videos/small.mp4";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
component =
DaggerPlayerActivityComponent
.builder()
.exoPlayerModule(new ExoPlayerModule(PlayerActivity.this, VIDEO_URI))
.build();
component.inject(this);
}
@AfterViews
void init() {
attachPlayerView();
preparePlayer();
}
// Set player to SimpleExoPlayerView
public void attachPlayerView() {
simpleExoPlayerView.setPlayer(player);
}
public void preparePlayer() {
player.prepare(videoSource);
}
// Activity onStop, player must be release because of memory saving
@Override
public void onStop(){
super.onStop();
player.release();
}
}