intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
fileUri = Uri.fromFile(file);
}
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("image/*");
Intent chooser = Intent.createChooser(intent, "");
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(chooser,101);
}
}
/**
-
原生分享视频
-
@param file 本地视频文件
-
@param activity
*/
public static void shareVideo(File file, Activity activity) {
Intent intent = new Intent(Intent.ACTION_SEND);
Uri fileUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileUri = FileProvider.getUriForFile(activity, getAppPackageName(App.context) + ".fileprovider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
fileUri = Uri.fromFile(file);
}
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("video/*");
Intent chooser = Intent.createChooser(intent, "");
if (intent.resolveActivity(activity.getPackageManager()) != null) {
activity.startActivityForResult(chooser,101);
}
}
public static String getAppPackageName(Context context) {
String packageName = "";
try {
packageName = context.getPackageName();
} catch (Exception e) {
e.printStackTrace();
}
return packageName;
}
}
微信分享内容
public class WXUtil {
/**
-
检查是否安装微信
-
@param context
-
@return
*/
public static boolean isWeixinAvilible(Context context) {
final PackageManager packageManager = context.getPackageManager();// 获取packagemanager
List pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
if (pn.equals("com.tencent.mm")) {
return true;
}
}
}
return false;
}
private static final int IMAGE_SIZE = 32768;//微信分享图片大小限制
/**
- 用户分享链接
*/
public static volatile String shareUrl = "";
/**
-
微信分享
-
@param friendsCircle true:朋友圈
-
@param title 分享标题
-
@param desc 分享描述
*/
public static void share(final IWXAPI iwxapi, final Activity activity, final boolean friendsCircle, final String title, final String desc, final String bookUrl) {
if (!isWeixinAvilible(App.context)) {
ToastUtil.showShortToast(activity, "请先安装微信");
return;
}
if (shareUrl == null) {
ToastUtil.showShortToast(activity, "分享失败");
return;
}
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap bitmap = returnBitMap(bookUrl);
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
WXWebpageObject webPage = new WXWebpageObject();
webPage.webpageUrl = shareUrl;//分享url
WXMediaMessage msg = new WXMediaMessage(webPage);
msg.title = title;
msg.description = desc;
msg.thumbData = getThumbData(bitmap);//封面图片byte数组
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = String.valueOf(System.currentTimeMillis());
req.message = msg;
req.scene = friendsCircle ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
iwxapi.sendReq(req);
}
});
}
}).start();
}
private static Bitmap returnBitMap(final String url) {
URL imageurl = null;
try {
imageurl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
Bitmap bitmap = null;
try {
HttpURLConnection conn = (HttpURLConnection) imageurl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
点击:《Android架构视频+BAT面试专题PDF+学习笔记》
即可免费获取~
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。