Commit 4b6d048c authored by linfeng's avatar linfeng

短视频分享

parent 8e373f46
...@@ -70,7 +70,7 @@ public class ShareManager extends ShareAction { ...@@ -70,7 +70,7 @@ public class ShareManager extends ShareAction {
super(activity); super(activity);
mActivity = activity; mActivity = activity;
this.setDisplayList( this.setDisplayList(
SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ) SHARE_MEDIA.WEIXIN)
.addButton("复制链接", copy, "rv_share_copy", "rv_share_copy") .addButton("复制链接", copy, "rv_share_copy", "rv_share_copy")
.addButton("下载视频", download, "rv_share_download_video", "rv_share_download_video") .addButton("下载视频", download, "rv_share_download_video", "rv_share_download_video")
.setShareboardclickCallback(boardListener); .setShareboardclickCallback(boardListener);
......
...@@ -39,6 +39,17 @@ ...@@ -39,6 +39,17 @@
<item name="android:windowNoTitle">true</item> <item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item> <item name="android:windowIsTranslucent">true</item>
</style> </style>
<style name="Alert_Dialog_Style2" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/colorMain</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<!--Dialog样式--> <!--Dialog样式-->
<style name="AlertTipsDialogTheme" parent="android:Theme.Dialog"> <style name="AlertTipsDialogTheme" parent="android:Theme.Dialog">
<item name="android:windowIsFloating">true</item> <item name="android:windowIsFloating">true</item>
......
package com.rv.component.dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.ruiwenliu.wrapper.dialog.BaseDialog;
import com.ruiwenliu.wrapper.util.ViewHolder;
/**
* 温馨提示
*/
public class DownloadLoadingDialog extends BaseDialog {
TextView tv;
ProgressBar pb;
public DownloadLoadingDialog(@NonNull Context context) {
super(context);
setDialogParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
}
@Override
public void helper(ViewHolder helper) {
super.helper(helper);
tv = (TextView) helper.getView(R.id.rv_hint);
pb = (ProgressBar) helper.getView(R.id.pb_load);
}
@Override
public int getViewLayout() {
return R.layout.dialog_download_loading;
}
public void setContent(int percentage) {
if (tv != null) {
tv.setText("下载中..." + percentage + "%");
if (percentage ==100){
pb.setVisibility(View.GONE);
tv.setText("已保存到相册,快去分享吧!");
}
}
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/size_60"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/size_60"
android:background="@color/colorMain"
android:gravity="center"
android:orientation="horizontal"
android:paddingLeft="@dimen/size_15"
android:paddingRight="@dimen/size_15">
<ProgressBar
android:id="@+id/pb_load"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/bg_progressbar_loading" />
<!--</RelativeLayout>-->
<TextView
android:id="@+id/rv_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/size_10"
android:text="下载中..."
android:textColor="@color/colorWrite"
android:textSize="@dimen/text_14" />
</LinearLayout>
</LinearLayout>
\ No newline at end of file
...@@ -60,6 +60,7 @@ dependencies { ...@@ -60,6 +60,7 @@ dependencies {
api project(':RvWrapper') api project(':RvWrapper')
api project(':component_resource') api project(':component_resource')
api project(':component_utils') api project(':component_utils')
api project(':component_dialog')
api project(':plugin_opengl') api project(':plugin_opengl')
api project(':plugin_imcamera') api project(':plugin_imcamera')
api project(':jcvideoplayer-lib') api project(':jcvideoplayer-lib')
......
package com.xxrv.video.activity; package com.xxrv.video.activity;
import android.app.ProgressDialog;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.PagerSnapHelper; import android.support.v7.widget.PagerSnapHelper;
...@@ -14,19 +21,20 @@ import android.support.v7.widget.RecyclerView; ...@@ -14,19 +21,20 @@ import android.support.v7.widget.RecyclerView;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.danikula.videocache.HttpProxyCacheServer; import com.danikula.videocache.HttpProxyCacheServer;
import com.frame.rv.config.RvFrameConfig; import com.frame.rv.config.RvFrameConfig;
import com.ruiwenliu.wrapper.SPConstance;
import com.ruiwenliu.wrapper.base.BaseBean; import com.ruiwenliu.wrapper.base.BaseBean;
import com.ruiwenliu.wrapper.base.BaseStatusActivity; import com.ruiwenliu.wrapper.base.BaseStatusActivity;
import com.ruiwenliu.wrapper.http.ProgressRequestBody;
import com.ruiwenliu.wrapper.statusbar.StatusBarUtil; import com.ruiwenliu.wrapper.statusbar.StatusBarUtil;
import com.ruiwenliu.wrapper.util.um.CustomShareListener; import com.ruiwenliu.wrapper.util.um.CustomShareListener;
import com.ruiwenliu.wrapper.util.um.ShareManager; import com.ruiwenliu.wrapper.util.um.ShareManager;
import com.ruiwenliu.wrapper.weight.TitleView; import com.ruiwenliu.wrapper.weight.TitleView;
import com.rv.component.utils.Cookie; import com.rv.component.dialog.DownloadLoadingDialog;
import com.rv.component.utils.IsAppInstall; import com.rv.component.utils.IsAppInstall;
import com.umeng.socialize.UMShareAPI; import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.bean.SHARE_MEDIA;
...@@ -34,7 +42,6 @@ import com.umeng.socialize.shareboard.SnsPlatform; ...@@ -34,7 +42,6 @@ import com.umeng.socialize.shareboard.SnsPlatform;
import com.umeng.socialize.utils.ShareBoardlistener; import com.umeng.socialize.utils.ShareBoardlistener;
import com.xxrv.video.R; import com.xxrv.video.R;
import com.xxrv.video.R2; import com.xxrv.video.R2;
import com.xxrv.video.adapter.ListVideoAdapter;
import com.xxrv.video.api.VideoApi; import com.xxrv.video.api.VideoApi;
import com.xxrv.video.base.BaseRecAdapter; import com.xxrv.video.base.BaseRecAdapter;
import com.xxrv.video.base.BaseRecViewHolder; import com.xxrv.video.base.BaseRecViewHolder;
...@@ -43,9 +50,16 @@ import com.xxrv.video.bean.circle.DiscoveryDataBean; ...@@ -43,9 +50,16 @@ import com.xxrv.video.bean.circle.DiscoveryDataBean;
import com.xxrv.video.bean.circle.DiscoveryVideoBean; import com.xxrv.video.bean.circle.DiscoveryVideoBean;
import com.xxrv.video.bean.circle.VideoIMTokenBean; import com.xxrv.video.bean.circle.VideoIMTokenBean;
import com.xxrv.video.presenter.VideoPresenter; import com.xxrv.video.presenter.VideoPresenter;
import com.xxrv.video.util.DownloadVideo;
import com.xxrv.video.weight.JcvTrillVideo; import com.xxrv.video.weight.JcvTrillVideo;
import com.yuyife.okgo.OkGoUtil; import com.yuyife.okgo.OkGoUtil;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -247,32 +261,20 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> { ...@@ -247,32 +261,20 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> {
shareManager = new ShareManager(this, new ShareBoardlistener() { shareManager = new ShareManager(this, new ShareBoardlistener() {
@Override @Override
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) { public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
// if (snsPlatform.mShowWord.equals("生成海报")) { if (snsPlatform.mShowWord.equals("下载视频")) {
// ARouter.getInstance()
// .build(Constance.ACTIVITY_URL_PATGENERATEPOSTER) DownloadVideo.getInstance().downMp4(sVideoUrl, mActivity);
// .withString("iconUrl", iconUrl)
// .withString("content", title) } else if (snsPlatform.mShowWord.equals("复制链接")) {
// .withString("url", webUrl + "&shareType=app&code=" + code)
// .withString("userName", userName)
// .withString("userUrl", userUrl)
// .navigation();
// } else
if (snsPlatform.mShowWord.equals("复制链接")) {
ClipboardManager myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipboardManager myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData myClip = ClipData.newPlainText("text", sVideoUrl); ClipData myClip = ClipData.newPlainText("text", sVideoUrl);
myClipboard.setPrimaryClip(myClip); myClipboard.setPrimaryClip(myClip);
showToast("复制成功!"); showToast("链接已复制快去分享吧!");
} else if (snsPlatform.mShowWord.contains("微信")) { } else if (snsPlatform.mShowWord.contains("微信")) {
if (!IsAppInstall.isWeixinAvilible(mActivity)) { if (!IsAppInstall.isWeixinAvilible(mActivity)) {
showToast("亲,您微信还没有安装呢"); showToast("亲,您微信还没有安装呢");
return; return;
} }
} else if (snsPlatform.mShowWord.contains("QQ")) {
if (!IsAppInstall.isQQClientAvailable(mActivity)) {
showToast("亲,您QQ还没有安装呢");
return;
}
} }
shareManager.showShareVideo(share_media, sVideoUrl, title, " ", imageUrl shareManager.showShareVideo(share_media, sVideoUrl, title, " ", imageUrl
...@@ -282,32 +284,25 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> { ...@@ -282,32 +284,25 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> {
public void onResult(SHARE_MEDIA platform) { public void onResult(SHARE_MEDIA platform) {
super.onResult(platform); super.onResult(platform);
if (platform.name().equals("WEIXIN_FAVORITE")) { if (platform != SHARE_MEDIA.MORE && platform != SHARE_MEDIA.SMS
&& platform != SHARE_MEDIA.EMAIL
showToast(" 收藏成功啦"); && platform != SHARE_MEDIA.FLICKR
&& platform != SHARE_MEDIA.FOURSQUARE
} else { && platform != SHARE_MEDIA.TUMBLR
if (platform != SHARE_MEDIA.MORE && platform != SHARE_MEDIA.SMS && platform != SHARE_MEDIA.POCKET
&& platform != SHARE_MEDIA.EMAIL && platform != SHARE_MEDIA.PINTEREST
&& platform != SHARE_MEDIA.FLICKR
&& platform != SHARE_MEDIA.FOURSQUARE && platform != SHARE_MEDIA.INSTAGRAM
&& platform != SHARE_MEDIA.TUMBLR && platform != SHARE_MEDIA.GOOGLEPLUS
&& platform != SHARE_MEDIA.POCKET && platform != SHARE_MEDIA.YNOTE
&& platform != SHARE_MEDIA.PINTEREST && platform != SHARE_MEDIA.EVERNOTE) {
showToast("分享成功啦");
&& platform != SHARE_MEDIA.INSTAGRAM
&& platform != SHARE_MEDIA.GOOGLEPLUS
&& platform != SHARE_MEDIA.YNOTE
&& platform != SHARE_MEDIA.EVERNOTE) {
showToast("分享成功啦");
// sharingSuccess(); // sharingSuccess();
}
} }
} }
}); });
} }
}, "rv_um_share_copy"); }, "rv_um_share_copy", "rv_share_download_video", "1");
if (shareManager != null) { if (shareManager != null) {
...@@ -388,4 +383,6 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> { ...@@ -388,4 +383,6 @@ public class TriListActivity extends BaseStatusActivity<VideoPresenter> {
mPresenter.getData(3, VideoApi.DISCOVERY_PLAYAMOUNT_ADD, VideoIMTokenBean.class, map, false); mPresenter.getData(3, VideoApi.DISCOVERY_PLAYAMOUNT_ADD, VideoIMTokenBean.class, map, false);
} }
} }
} }
package com.xxrv.video.util;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.provider.MediaStore;
import com.rv.component.dialog.DownloadLoadingDialog;
import com.xxrv.video.activity.TriListActivity;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/******
* 下载视频
*/
public class DownloadVideo {
private static DownloadVideo instance = null;
private DownloadVideo() {
}
public static <T> DownloadVideo getInstance() {
if (instance == null) {
synchronized (DownloadVideo.class) {
if (instance == null) {
instance = new DownloadVideo();
}
}
}
return instance;
}
public void downMp4(String url, Activity mActivity) {
final DownloadLoadingDialog pd; // 进度条对话框
pd = new DownloadLoadingDialog(mActivity);
//设置点击屏幕不消失
pd.setCanceledOnTouchOutside(false);
//设置点击返回键不消失
pd.setCancelable(false);
pd.show();
new Thread() {
@Override
public void run() {
try {
File file = getFileFromServer(url, pd);
ContentResolver localContentResolver = mActivity.getContentResolver();
ContentValues localContentValues = getVideoContentValues(mActivity, file, System.currentTimeMillis());
Uri localUri = localContentResolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, localContentValues);
mActivity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, localUri));
sleep(1000);
pd.dismiss(); // 结束掉进度条对话框
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 视频存在本地
*
* @param paramContext
* @param paramFile
* @param paramLong
* @return
*/
public static ContentValues getVideoContentValues(Context paramContext, File paramFile, long paramLong) {
ContentValues localContentValues = new ContentValues();
localContentValues.put("title", paramFile.getName());
localContentValues.put("_display_name", paramFile.getName());
localContentValues.put("mime_type", "video/3gp");
localContentValues.put("datetaken", Long.valueOf(paramLong));
localContentValues.put("date_modified", Long.valueOf(paramLong));
localContentValues.put("date_added", Long.valueOf(paramLong));
localContentValues.put("_data", paramFile.getAbsolutePath());
localContentValues.put("_size", Long.valueOf(paramFile.length()));
return localContentValues;
}
public File getFileFromServer(String path, DownloadLoadingDialog pd) throws Exception {
// 如果相等的话表示当前的sdcard挂载在手机上并且是可用的
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
// 获取到文件的大小
// pd.setMax(conn.getContentLength());
InputStream is = conn.getInputStream();
File sd1 = Environment.getExternalStorageDirectory();
String path1 = sd1.getPath() + "/lfmf";
File myfile1 = new File(path1);
if (!myfile1.exists()) {
myfile1.mkdir();
}
File file = new File(myfile1, System.currentTimeMillis() + ".mp4");
FileOutputStream fos = new FileOutputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buffer = new byte[1024];
int len;
int total = 0;
Handler handler = new Handler(Looper.getMainLooper());
while ((len = bis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
total += len;
handler.post(new ProgressUpdater(total, pd, conn.getContentLength()));
// 获取当前下载量
}
fos.close();
bis.close();
is.close();
return file;
} else {
return null;
}
}
private class ProgressUpdater implements Runnable {
private int total;
private DownloadLoadingDialog pd;
private int contentLength;
public ProgressUpdater(int total, DownloadLoadingDialog pd, int contentLength) {
this.total = total;
this.pd = pd;
this.contentLength = contentLength;
}
@Override
public void run() {
int i = (int) (100 * total / contentLength);
pd.setContent(i);
}
}
}
...@@ -285,7 +285,7 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick ...@@ -285,7 +285,7 @@ public class JcvTrillVideo extends FrameLayout implements BaseView, View.OnClick
mLikeCount = bean.getPraiseCount(); mLikeCount = bean.getPraiseCount();
tvCommCount.setText(formatCount(mCommCount)); tvCommCount.setText(formatCount(mCommCount));
tvlikesCount.setText(formatCount(mLikeCount)); tvlikesCount.setText(formatCount(mLikeCount));
tvShare.setText(formatCount(bean.getCount().getForward())); // tvShare.setText(formatCount(bean.getCount().getForward()));
tvPlay.setText(formatCount(bean.getCount().getPlay())); tvPlay.setText(formatCount(bean.getCount().getPlay()));
mCommDialog = TrillCommDialog.getInstance();// 创建评论窗口 mCommDialog = TrillCommDialog.getInstance();// 创建评论窗口
......
...@@ -159,7 +159,7 @@ ...@@ -159,7 +159,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:text="7.7w" android:text="分享"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="@dimen/text_12" /> android:textSize="@dimen/text_12" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment