提交 709f8858 编写于 作者: S shuyu

更新弹幕demo

增加权限申请
上级 86a9fe01
......@@ -66,8 +66,14 @@ dependencies {
implementation project(':gsyVideoPlayer')
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'com.zhy:okhttputils:2.6.2'
implementation dataDependencies.okhttpUtil
implementation dataDependencies.okhttp
implementation (dataDependencies.permissionsdispatcher) {
// if you don't use android.app.Fragment you can exclude support for them
exclude module: "support-v13"
}
annotationProcessor dataDependencies.permissionsdispatcherProcessor
//jcenter
//implementation "com.shuyu:GSYVideoPlayer:$gsyVideoVersion"
......
......@@ -138,6 +138,11 @@
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Translucent" />
<meta-data
android:name="android.max_aspect"
android:value="2.1" />
</application>
</manifest>
\ No newline at end of file
package com.example.gsyvideoplayer;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
......@@ -18,17 +17,12 @@ import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack;
import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.listener.LockClickListener;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.FileCallBack;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import butterknife.BindView;
import butterknife.ButterKnife;
......@@ -200,6 +194,7 @@ public class DanmkuVideoActivity extends AppCompatActivity {
private void getDanmu() {
//下载demo然后设置
OkHttpUtils.get().url(TextUtils.concat("http://xingyuyou.com/Public/app/barragefile/","608","barrage.txt").toString())
.build()
.execute(new FileCallBack(getApplication().getCacheDir().getAbsolutePath(), "barrage.txt")//
......@@ -210,27 +205,8 @@ public class DanmkuVideoActivity extends AppCompatActivity {
@Override
public void onResponse(File response, int id) {
try {
InputStream instream = new FileInputStream(response);
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder sb1=new StringBuilder();
sb1.append("<i>");
//分行读取
while (( line = buffreader.readLine()) != null) {
sb1.append(line);
}
sb1.append("</i>");
Log.e("3333333",sb1.toString());
instream.close();
if(!isDestory) {
((DanmakuVideoPlayer)danmakuVideoPlayer.getCurrentPlayer()).setDanmaKuStream(response);
}
} catch (java.io.FileNotFoundException e) {
Log.d("TestFile", "The File doesn't not exist.");
} catch (IOException e) {
Log.d("TestFile", e.getMessage());
if (!isDestory) {
((DanmakuVideoPlayer) danmakuVideoPlayer.getCurrentPlayer()).setDanmaKuStream(response);
}
}
......
package com.example.gsyvideoplayer;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.NestedScrollView;
import android.view.View;
import android.widget.Button;
......@@ -35,6 +39,12 @@ import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
/**
......@@ -44,7 +54,7 @@ import tv.danmaku.ijk.media.player.IjkMediaPlayer;
* <p>
* Created by guoshuyu on 2017/6/18.
*/
@RuntimePermissions
public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVideoPlayer> {
@BindView(R.id.post_detail_nested_scroll)
......@@ -134,7 +144,7 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
shot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
shotImage(v);
DetailControlActivityPermissionsDispatcher.shotImageWithPermissionCheck(DetailControlActivity.this, v);
}
});
......@@ -142,7 +152,7 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
startGif.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startGif();
DetailControlActivityPermissionsDispatcher.startGifWithPermissionCheck(DetailControlActivity.this);
}
});
......@@ -263,7 +273,8 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
/**
* 开始gif截图
*/
private void startGif() {
@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void startGif() {
//开始缓存各个帧
mGifCreateHelper.startGif(new File(FileUtils.getPath()));
......@@ -272,17 +283,46 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
/**
* 生成gif
*/
private void stopGif() {
void stopGif() {
loadingView.setVisibility(View.VISIBLE);
mGifCreateHelper.stopGif(new File(FileUtils.getPath(), "GSY-Z-" + System.currentTimeMillis() + ".gif"));
}
@OnShowRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showRationaleForCamera(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage("快给我权限")
.setPositiveButton("允许", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.proceed();
}
})
.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.cancel();
}
})
.show();
}
@OnPermissionDenied(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showDeniedForCamera() {
Toast.makeText(this, "没有权限啊", Toast.LENGTH_SHORT).show();
}
@OnNeverAskAgain(Manifest.permission.CAMERA)
void showNeverAskForCamera() {
Toast.makeText(this, "再次授权", Toast.LENGTH_SHORT).show();
}
/**
* 视频截图
* 这里没有做读写本地sd卡的权限处理,记得实际使用要加上
*/
private void shotImage(final View v) {
@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void shotImage(final View v) {
//获取截图
detailPlayer.taskShotPic(new GSYVideoShotListener() {
@Override
......@@ -357,4 +397,11 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// NOTE: delegate the permission handling to generated method
DetailControlActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
}
package com.example.gsyvideoplayer;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.opengl.Matrix;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.widget.NestedScrollView;
import android.util.TypedValue;
import android.view.View;
......@@ -67,6 +71,12 @@ import java.util.TimerTask;
import butterknife.BindView;
import butterknife.ButterKnife;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions;
/**
* 滤镜
......@@ -74,7 +84,7 @@ import butterknife.ButterKnife;
* 或者参考DetailPlayer、DetailListPlayer实现
* Created by guoshuyu on 2017/6/18.
*/
@RuntimePermissions
public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideoPlayer> {
@BindView(R.id.post_detail_nested_scroll)
......@@ -201,9 +211,11 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
shotImage(v);
//shotImage(v);
//JumpUtils.gotoControl(DetailFilterActivity.this);
//startActivity(new Intent(DetailControlActivity.this, MainActivity.class));
DetailFilterActivityPermissionsDispatcher.shotImageWithPermissionCheck(DetailFilterActivity.this, v);
}
});
......@@ -231,7 +243,7 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
startGif.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startGif();
DetailFilterActivityPermissionsDispatcher.startGifWithPermissionCheck(DetailFilterActivity.this);
}
});
......@@ -298,7 +310,8 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
/**
* 视频截图
*/
private void shotImage(final View v) {
@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void shotImage(final View v) {
//获取截图
detailPlayer.taskShotPic(new GSYVideoShotListener() {
@Override
......@@ -346,7 +359,8 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
/**
* 开始gif截图
*/
private void startGif() {
@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void startGif() {
//开始缓存各个帧
mGifCreateHelper.startGif(new File(FileUtils.getPath()));
......@@ -572,4 +586,41 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
}
});
}
@OnShowRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showRationaleForCamera(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage("快给我权限")
.setPositiveButton("允许", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.proceed();
}
})
.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
request.cancel();
}
})
.show();
}
@OnPermissionDenied(Manifest.permission.WRITE_EXTERNAL_STORAGE)
void showDeniedForCamera() {
Toast.makeText(this, "没有权限啊", Toast.LENGTH_SHORT).show();
}
@OnNeverAskAgain(Manifest.permission.CAMERA)
void showNeverAskForCamera() {
Toast.makeText(this, "再次授权", Toast.LENGTH_SHORT).show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// NOTE: delegate the permission handling to generated method
DetailFilterActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
}
......@@ -62,7 +62,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
private boolean mDanmaKuShow = true;
private File mIs;
private File mDumakuFile;
public DanmakuVideoPlayer(Context context, Boolean fullFlag) {
super(context, fullFlag);
......@@ -156,7 +156,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
@Override
protected void cloneParams(GSYBaseVideoPlayer from, GSYBaseVideoPlayer to) {
((DanmakuVideoPlayer)to).mIs = ((DanmakuVideoPlayer)from).mIs;
((DanmakuVideoPlayer)to).mDumakuFile = ((DanmakuVideoPlayer)from).mDumakuFile;
super.cloneParams(from, to);
}
......@@ -197,7 +197,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
public void setDanmaKuStream(File is) {
mIs = is;
mDumakuFile = is;
if(!getDanmakuView().isPrepared()) {
onPrepareDanmaku((DanmakuVideoPlayer)getCurrentPlayer());
}
......@@ -220,10 +220,13 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
//todo 替换成你的数据流
if(mIs != null) {
mParser = createParser(getIsStream(mIs));
if(mDumakuFile != null) {
mParser = createParser(getIsStream(mDumakuFile));
}
//todo 这是为了demo效果,实际上需要去掉这个,外部传输文件进来
mParser = createParser(this.getResources().openRawResource(R.raw.comments));
mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() {
@Override
public void updateTimer(DanmakuTimer timer) {
......@@ -363,8 +366,8 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
public BaseDanmakuParser getParser() {
if(mParser == null) {
if (mIs != null) {
mParser = createParser(getIsStream(mIs));
if (mDumakuFile != null) {
mParser = createParser(getIsStream(mDumakuFile));
}
}
return mParser;
......
......@@ -6,11 +6,11 @@ allprojects {
ext {
//Android
androidBuildToolsVersion = "26.0.2"
androidBuildToolsVersion = "27.0.2"
androidMinSdkVersion = 16
androidTargetSdkVersion = 26
androidCompileSdkVersion = 26
supportLibraryVersion = '26.0.2'
androidTargetSdkVersion = 27
androidCompileSdkVersion = 27
supportLibraryVersion = '27.0.2'
//ViewLibraries
butterKnifeVersion = '8.2.1'
......@@ -30,6 +30,11 @@ ext {
exo_player2 = '2.6.1'
permissionsdispatcher = '3.2.0'
okhttp = '3.2.0'
okhttpUtil = '2.6.2'
androidDependencies = [
recyclerView: "com.android.support:recyclerview-v7:${supportLibraryVersion}",
appcompat_v7: "com.android.support:appcompat-v7:${supportLibraryVersion}",
......@@ -63,7 +68,11 @@ ext {
]
dataDependencies = [
videocache: "com.shuyu:gsyvideoplayer-androidvideocache:${gsyVideoVersion}",
leakcanary: "com.squareup.leakcanary:leakcanary-android:${leakcanary}",
videocache : "com.shuyu:gsyvideoplayer-androidvideocache:${gsyVideoVersion}",
leakcanary : "com.squareup.leakcanary:leakcanary-android:${leakcanary}",
okhttpUtil : "com.squareup.okhttp3:okhttp:${okhttp}",
okhttp : "com.zhy:okhttputils:${okhttpUtil}",
permissionsdispatcher : "com.github.hotchemi:permissionsdispatcher:${permissionsdispatcher}",
permissionsdispatcherProcessor: "com.github.hotchemi:permissionsdispatcher-processor:${permissionsdispatcher}",
]
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册