package com.wxson.mobilecamera.activity;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.Configuration;
import android.graphics.ImageFormat;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.TotalCaptureResult;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.Image;
import android.media.ImageReader;
import android.media.MediaCodec;
import android.net.Uri;
import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pInfo;
import android.net.wifi.p2p.WifiP2pManager;
import android.os.Build;
import android.os.IBinder;
import android.support.annotation.NonNull;
import android.support.v4.content.FileProvider;
import android.text.TextUtils;
import android.util.Log;
import android.util.Size;
import android.util.SparseIntArray;
import android.view.Surface;
import android.view.TextureView;
import android.webkit.MimeTypeMap;
import com.wxson.mobilecamera.R;
import com.wxson.mobilecamera.connect.CameraWifiServerService;
import com.wxson.mobilecamera.mediacodec.MediaCodecCallback;
import com.wxson.mobilecomm.codec.H264VgaFormat;
import com.wxson.mobilecomm.connect.ByteBufferTransfer;
import com.wxson.mobilecomm.connect.ByteBufferTransferTask;
import com.wxson.mobilecomm.connect.DirectBroadcastReceiver;
import com.wxson.mobilecomm.connect.FileTransfer;
import com.wxson.mobilecomm.connect.IWifiP2pConnectStatusListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import static android.os.Looper.getMainLooper;
import static android.support.v4.util.Preconditions.checkNotNull;
/**
* Created by wxson on 2018/8/15.
* Package com.wxson.mobilecamera.activity.
*/
public class MainPresenter implements IMainContract.Presenter {
private static final String TAG = "MainPresenter";
private final IMainContract.View mMainView;
private Context mContext;
private boolean mWifiP2pConnected;
private static IWifiP2pConnectStatusListener mWifiP2pConnectStatusListener;
private CameraWifiServerService mCameraWifiServerService;
private BroadcastReceiver mBroadcastReceiver;
private WifiP2pManager mWifiP2pManager;
private WifiP2pManager.Channel mChannel;
//for camera
private int mCameraWidth;
private int mCameraHigh;
private CameraDevice mCameraDevice;
private ImageReader imageReader;
private CaptureRequest.Builder mPreviewRequestBuilder;
private CameraCaptureSession mCaptureSession;
private CaptureRequest mPreviewRequest;
// 摄像头ID(通常0代表后置摄像头,1代表前置摄像头)
private String mCameraId = "0";
// 预览尺寸
private Size mPreviewSize;
//MediaCodec
//编码类型
private String mime = "video/avc"; //H264
// private String mime = MediaFormat.MIMETYPE_VIDEO_HEVC; //H265
//编解码器
private MediaCodec mMediaCodec;
//ByteBufferTransfer
private ByteBufferTransfer mByteBufferTransfer;
/**
* @param mainView
* 注入mMainView
* 为mMainView设置Presenter
*/
@SuppressLint("RestrictedApi")
MainPresenter(@NonNull IMainContract.View mainView, Context context) {
this.mMainView = checkNotNull(mainView, "MainView cannot be null!");
mMainView.setPresenter(this);
mContext = context;
}
//region override method
@Override
public void wifiP2pEnabled(boolean enabled) {
Log.i(TAG, "wifiP2pEnabled: " + enabled);
}
@Override
public void onConnectionInfoAvailable(WifiP2pInfo wifiP2pInfo) {
Log.i(TAG, "onConnectionInfoAvailable");
Log.i(TAG, "isGroupOwner:" + wifiP2pInfo.isGroupOwner);
Log.i(TAG, "groupFormed:" + wifiP2pInfo.groupFormed);
if (wifiP2pInfo.groupFormed && wifiP2pInfo.isGroupOwner) {
startWifiServerService();
}
}
@Override
public void onDisconnection() {
Log.i(TAG, "onDisconnection");
mWifiP2pConnected = false;
mMainView.showConnectStatus(mWifiP2pConnected);
setWifiP2pConnectStatus();
}
@Override
public void onSelfDeviceAvailable(WifiP2pDevice wifiP2pDevice) {
Log.i(TAG, "onSelfDeviceAvailable");
}
@Override
public void onPeersAvailable(Collection<WifiP2pDevice> wifiP2pDeviceList) {
Log.i(TAG, "onPeersAvailable");
}
@Override
public void onChannelDisconnected() {
Log.i(TAG, "onChannelDisconnected");
}
@Override
public void start() {
mWifiP2pManager = (WifiP2pManager) mMainView.getActivity().getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mWifiP2pManager.initialize(mMainView.getActivity(), getMainLooper(), this);
mBroadcastReceiver = new DirectBroadcastReceiver(mWifiP2pManager, mChannel, this);
mMainView.getActivity().registerReceiver(mBroadcastReceiver, DirectBroadcastReceiver.getIntentFilter());
bindService();
mByteBufferTransfer = new ByteBufferTransfer();
mWifiP2pConnected = false;
}
@Override
public void setWifiP2pConnectStatusListener(IWifiP2pConnectStatusListener wifiP2pConnectStatusListener) {
mWifiP2pConnectStatusListener = wifiP2pConnectStatusListener;
}
@Override
public void unbindServiceConnection() {
if (mCameraWifiServerService != null){
mCameraWifiServerService.setProgressChangListener(null);
mMainView.getActivity().unbindService(mServiceConnection);
}
}
@Override
public void removeGroup() {
mWifiP2pManager.removeGroup(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
mMainView.showConnectStatus(false);
mWifiP2pConnected = false;
setWifiP2pConnectStatus();
Log.i(TAG, "removeGroup onSuccess");
mMainView.showToast("onSuccess");
}
@Override
public void onFailure(int reason) {
Log.i(TAG, "removeGroup onFailure");
mMainView.showToast("onFailure");
}
});
}
@Override
public void createGroup() {
mMainView.showLoadingDialog("正在创建群组");
mWifiP2pManager.createGroup(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.i(TAG, "createGroup onSuccess");
mMainView.dismissLoadingDialog();
mMainView.showToast("onSuccess");
}
@Override
public void onFailure(int reason) {
Log.i(TAG, "createGroup onFailure: " + reason);
mMainView.dismissLoadingDialog();
mMainView.showToast("onFailure");
}
});
}
@Override
public void openCamera() {
Log.i(TAG, "o
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
用wifi直连(p2p)实现遥控照相的源代码 (145个子文件)
gradlew.bat 2KB
.gitignore 147B
.gitignore 8B
.gitignore 8B
.gitignore 8B
build.gradle 1KB
build.gradle 1KB
build.gradle 842B
build.gradle 573B
settings.gradle 43B
gradlew 5KB
gradle-wrapper.jar 53KB
MainPresenter.java 29KB
ConnectPresenter.java 16KB
ControllerWifiServerService.java 13KB
ConnectFragment.java 11KB
MainActivity.java 9KB
CameraWifiServerService.java 8KB
MainActivity.java 7KB
MediaCodecCallback.java 6KB
VideoDecodeTask.java 5KB
CameraManagerFragment.java 5KB
DirectBroadcastReceiver.java 5KB
DirectBroadcastReceiver.java 4KB
FileTransferTask.java 4KB
ByteBufferTransferTask.java 4KB
HomeFragment.java 4KB
DecoderCallback.java 4KB
AvcUtils.java 3KB
MessageDialog.java 3KB
RemoteTextureView.java 3KB
DeviceAdapter.java 3KB
StringTransferTask.java 2KB
H264FormatModel.java 2KB
IConnectionContract.java 2KB
Md5Util.java 2KB
ByteBufferTransfer.java 2KB
IMainContract.java 2KB
LoadingDialog.java 2KB
MediaCodecAction.java 2KB
LoadingDialog.java 2KB
MediaCodecUtil.java 2KB
FragmentBroadcastReceiver.java 2KB
Md5Util.java 2KB
H265FormatModel.java 2KB
AutoFitTextureView.java 1KB
FileTransfer.java 1KB
CommonTools.java 1KB
BitBufferLite.java 886B
ICameraManagerContract.java 825B
CameraManagerPresenter.java 784B
ExampleInstrumentedTest.java 762B
ExampleInstrumentedTest.java 755B
ExampleInstrumentedTest.java 754B
BaseActivity.java 714B
IDirectActionListener.java 676B
IDirectActionListener.java 667B
IFragmentChangedListener.java 403B
ExampleUnitTest.java 403B
IFragmentChangedListener.java 402B
ExampleUnitTest.java 399B
ExampleUnitTest.java 397B
H264VgaFormat.java 324B
H265VgaFormat.java 324B
H264QVgaFormat.java 323B
H264VcdFormat.java 323B
H265QVgaFormat.java 323B
IWifiP2pConnectStatusListener.java 277B
IBaseView.java 156B
IBasePresenter.java 140B
ic_launcher_round.png 15KB
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher_round.png 7KB
loading.png 6KB
loading.png 6KB
ic_launcher.png 6KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
ic_launcher.png 4KB
ic_launcher.png 3KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
ic_launcher.png 2KB
proguard-rules.pro 772B
proguard-rules.pro 772B
proguard-rules.pro 772B
gradle.properties 739B
gradle-wrapper.properties 236B
fragment_connect.xml 8KB
ic_launcher_background.xml 6KB
ic_launcher_background.xml 6KB
共 145 条
- 1
- 2
资源评论
- xiaolongguojiang2019-08-28感觉不是想要的
- qq_290868892019-02-16刚下 还没用用用再说
wxson7282
- 粉丝: 13
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功