Android實(shí)現(xiàn)原生分享功能
本文實(shí)例為大家分享了Android實(shí)現(xiàn)分享功能的具體代碼,供大家參考,具體內(nèi)容如下
因?yàn)楣镜男枨?,最近一直在做分享這一塊的功能。大概有這樣幾種思路:
1.使用Intent調(diào)用andoird原生的分享功能;
2.使用第三方的sdk,比如ShareSdk或者友盟;
3.去對(duì)應(yīng)的平臺(tái)下載jar包,參考官方設(shè)計(jì)文檔寫出自己的分享demo,但這種一般也比較復(fù)雜,尤其搞不懂qq和微信一家公司的,為什么微信那么麻煩。
不廢話了,直接上代碼:
一. 新建ShareUtil.java類
import java.io.File;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.text.TextUtils;
import android.widget.Toast;
public class ShareUtil {
private Context context;
public ShareUtil(Context context) {
this.context = context;
}
public static final String WEIXIN_PACKAGE_NAME = "";
public static final String QQ_PACKAGE_NAME = "";
// public static final String ;
/**
* 分享文字
* @param packageName
* @param content
* @param title
* @param subject
*/
public void shareText(String packageName,String className,String content,String title,String subject){
Intent intent =new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
// if(null != className && null != packageName && !TextUtils.isEmpty(className) && !TextUtils.isEmpty(packageName)){
//
// }else {
// if(null != packageName && !TextUtils.isEmpty(packageName)){
// intent.setPackage(packageName);
// }
// }
if(stringCheck(className) && stringCheck(packageName)){
ComponentName componentName = new ComponentName(packageName, className);
intent.setComponent(componentName);
}else if(stringCheck(packageName)){
intent.setPackage(packageName);
}
intent.putExtra(Intent.EXTRA_TEXT, content);
if(null != title && !TextUtils.isEmpty(title)){
intent.putExtra(Intent.EXTRA_TITLE, title);
}
if(null != subject && !TextUtils.isEmpty(subject)){
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
}
intent.putExtra(Intent.EXTRA_TITLE, title);
Intent chooserIntent = Intent.createChooser(intent, "分享到:");
context.startActivity(chooserIntent);
}
/**
* 分享網(wǎng)頁(yè)
*/
public void shareUrl(String packageName,String className,String content,String title,String subject){
Intent intent =new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
// if(null != className && null != packageName && !TextUtils.isEmpty(className) && !TextUtils.isEmpty(packageName)){
//
// }else {
// if(null != packageName && !TextUtils.isEmpty(packageName)){
// intent.setPackage(packageName);
// }
// }
if(stringCheck(className) && stringCheck(packageName)){
ComponentName componentName = new ComponentName(packageName, className);
intent.setComponent(componentName);
}else if(stringCheck(packageName)){
intent.setPackage(packageName);
}
intent.putExtra(Intent.EXTRA_TEXT, content);
if(null != title && !TextUtils.isEmpty(title)){
intent.putExtra(Intent.EXTRA_TITLE, title);
}
if(null != subject && !TextUtils.isEmpty(subject)){
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
}
intent.putExtra(Intent.EXTRA_TITLE, title);
Intent chooserIntent = Intent.createChooser(intent, "分享到:");
context.startActivity(chooserIntent);
}
/**
* 分享圖片
*/
public void shareImg(String packageName,String className,File file){
if(file.exists()){
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
if(stringCheck(packageName) && stringCheck(className)){
intent.setComponent(new ComponentName(packageName, className));
}else if (stringCheck(packageName)) {
intent.setPackage(packageName);
}
intent.putExtra(Intent.EXTRA_STREAM, uri);
Intent chooserIntent = Intent.createChooser(intent, "分享到:");
context.startActivity(chooserIntent);
}else {
Toast.makeText(context, "文件不存在", 1000).show();
}
}
/**
* 分享音樂(lè)
*/
public void shareAudio(String packageName,String className,File file){
if(file.exists()){
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("audio/*");
if(stringCheck(packageName) && stringCheck(className)){
intent.setComponent(new ComponentName(packageName, className));
}else if (stringCheck(packageName)) {
intent.setPackage(packageName);
}
intent.putExtra(Intent.EXTRA_STREAM, uri);
Intent chooserIntent = Intent.createChooser(intent, "分享到:");
context.startActivity(chooserIntent);
}else {
Toast.makeText(context, "文件不存在", 1000).show();
}
}
/**
* 分享視頻
*/
public void shareVideo(String packageName,String className,File file){
setIntent("video/*", packageName, className, file);
}
public void setIntent(String type,String packageName,String className,File file){
if(file.exists()){
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType(type);
if(stringCheck(packageName) && stringCheck(className)){
intent.setComponent(new ComponentName(packageName, className));
}else if (stringCheck(packageName)) {
intent.setPackage(packageName);
}
intent.putExtra(Intent.EXTRA_STREAM, uri);
Intent chooserIntent = Intent.createChooser(intent, "分享到:");
context.startActivity(chooserIntent);
}else {
Toast.makeText(context, "文件不存在", 1000).show();
}
}
/**
* 分享多張圖片和文字至朋友圈
* @param title
* @param packageName
* @param className
* @param file 圖片文件
*/
public void shareImgToWXCircle(String title,String packageName,String className, File file){
if(file.exists()){
Uri uri = Uri.fromFile(file);
Intent intent = new Intent();
ComponentName comp = new ComponentName(packageName, className);
intent.setComponent(comp);
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.putExtra("Kdescription", title);
context.startActivity(intent);
}else{
Toast.makeText(context, "文件不存在", Toast.LENGTH_LONG).show();
}
}
/**
* 是否安裝分享app
* @param packageName
*/
public boolean checkInstall(String packageName){
try {
context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (NameNotFoundException e) {
e.printStackTrace();
Toast.makeText(context, "請(qǐng)先安裝應(yīng)用app", 1500).show();
return false;
}
}
/**
* 跳轉(zhuǎn)官方安裝網(wǎng)址
*/
public void toInstallWebView(String url){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
context.startActivity(intent);
}
public static boolean stringCheck(String str){
if(null != str && !TextUtils.isEmpty(str)){
return true;
}else {
return false;
}
}
}
二. MainActivity.java類
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
Button btnQQ;
Button btnWX;
Button btnMore;
Button btnWxFriendText;
Button btnQQFriendText;
Button btnWxFriendImg;
Button btnQQFriendImg;
Button btnWxFriendAudio;
Button btnQQFriendAduio;
Button btnWxFriendVideo;
Button btnQQFriendVideo;
ShareUtil shareUtil;
private Button btn_wxCircle_img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnQQ = (Button) findViewById(R.id.btn_qq);
btnWX = (Button) findViewById(R.id.btn_wx);
btnMore = (Button) findViewById(R.id.btn_more);
btnWxFriendText = (Button) findViewById(R.id.btn_wxFriend);
btnQQFriendText = (Button) findViewById(R.id.btn_qqFriend);
btnWxFriendImg = (Button) findViewById(R.id.btn_wxFriend_img);
btnQQFriendImg = (Button) findViewById(R.id.btn_qqFriend_img);
btnWxFriendAudio = (Button) findViewById(R.id.btn_wxFriend_audio);
btnQQFriendAduio = (Button) findViewById(R.id.btn_qqFriend_audio);
btnWxFriendVideo = (Button) findViewById(R.id.btn_wxFriend_video);
btnQQFriendVideo = (Button) findViewById(R.id.btn_qqFriend_video);
btn_wxCircle_img = (Button) findViewById(R.id.btn_wxCircle_img);
btnQQ.setOnClickListener(this);
btnWX.setOnClickListener(this);
btnMore.setOnClickListener(this);
btnWxFriendText.setOnClickListener(this);
btnQQFriendText.setOnClickListener(this);
btnWxFriendImg.setOnClickListener(this);
btnQQFriendImg.setOnClickListener(this);
btnWxFriendAudio.setOnClickListener(this);
btnQQFriendAduio.setOnClickListener(this);
btnWxFriendVideo.setOnClickListener(this);
btnQQFriendVideo.setOnClickListener(this);
btn_wxCircle_img.setOnClickListener(this);
shareUtil = new ShareUtil(this);
}
@Override
public void onClick(View v) {
String testImgPath = "/storage/emulated/legacy/display-client/picture/my.png";
String testImagePath = Environment.getExternalStorageDirectory()
+ "/img.jpg";
String testAudioPath = Environment.getExternalStorageDirectory()
+ "/audio.mp3";
String testVideoPath = Environment.getExternalStorageDirectory()
+ "/video.mp4";
File file = new File(testImgPath);
File fileImage = new File(testImagePath);
File fileAudio = new File(testAudioPath);
File fileVideo = new File(testVideoPath);
switch (v.getId()) {
// qq&文字
case R.id.btn_qq:
shareUtil.shareText("com.tencent.mobileqq", null, "這是一條分享信息",
"分享標(biāo)題", "分享主題");
break;
// 微信&文字
case R.id.btn_wx:
shareUtil.shareText("com.tencent.mm", null, "這是一條分享信息", "分享標(biāo)題",
"分享主題");
break;
// 所有&文字
case R.id.btn_more:
shareUtil.shareText(null, null, "這是一條分享信息", "分享標(biāo)題", "分享主題");
break;
// 微信朋友&文字
case R.id.btn_wxFriend:
if (shareUtil.checkInstall("com.tencent.mm")) {
shareUtil.shareText("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI",
"http://www.aiipu.com/", "分享標(biāo)題", "分享主題");
} else {
shareUtil.toInstallWebView("http://weixin.qq.com/download");
}
break;
// qq朋友&文字
case R.id.btn_qqFriend:
if (shareUtil.checkInstall("com.tencent.mobileqq")) {
shareUtil.shareText("com.tencent.mobileqq",
"com.tencent.mobileqq.activity.JumpActivity",
"http://www.aiipu.com/", "分享標(biāo)題", "分享主題");
} else {
shareUtil.toInstallWebView("http://im.qq.com/mobileqq/");
}
break;
// 微信朋友&圖片
case R.id.btn_wxFriend_img:
shareUtil.shareImg("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI", fileImage);
break;
// qq朋友&圖片
case R.id.btn_qqFriend_img:
shareUtil.shareImg("com.tencent.mobileqq",
"com.tencent.mobileqq.activity.JumpActivity", fileImage);
break;
case R.id.btn_wxFriend_audio:
shareUtil.shareAudio("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI", fileAudio);
break;
case R.id.btn_qqFriend_audio:
shareUtil.shareAudio("com.tencent.mobileqq",
"com.tencent.mobileqq.activity.JumpActivity", fileAudio);
break;
case R.id.btn_wxFriend_video:
shareUtil.shareVideo("com.tencent.mm",
"com.tencent.mm.ui.tools.ShareImgUI", fileVideo);
break;
case R.id.btn_qqFriend_video:
shareUtil.shareVideo("com.tencent.mobileqq",
"com.tencent.mobileqq.activity.JumpActivity", fileVideo);
break;
case R.id.btn_wxCircle_img:
shareUtil.shareImgToWXCircle("狗狗圖片", "com.tencent.mm",
"com.tencent.mm.ui.tools.ShareToTimeLineUI", fileImage);
break;
}
}
}
三.布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.ai.ipu.share_inent.MainActivity" >
<Button
android:id="@+id/btn_qq"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="qq"/>
<Button
android:id="@+id/btn_wx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="wx"
android:layout_below="@+id/btn_qq"/>
<Button
android:id="@+id/btn_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="more"
android:layout_below="@+id/btn_wx"/>
<Button
android:id="@+id/btn_wxFriend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_more"
android:text="wxFriendText"/>
<Button
android:id="@+id/btn_qqFriend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_wxFriend"
android:text="qqFriendText" />
<Button
android:id="@+id/btn_wxFriend_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_more"
android:layout_toRightOf="@+id/btn_wxFriend"
android:text="wxFriendImg" />
<Button
android:id="@+id/btn_qqFriend_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn_qqFriend"
android:layout_below="@+id/btn_wxFriend"
android:text="qqFriendImg" />
<Button
android:id="@+id/btn_wxFriend_audio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_more"
android:layout_toRightOf="@+id/btn_wxFriend_img"
android:text="wxFriendAudio" />
<Button
android:id="@+id/btn_qqFriend_audio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/btn_qqFriend_img"
android:layout_below="@+id/btn_wxFriend"
android:text="qqFriendAudio" />
<Button
android:id="@+id/btn_wxFriend_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_qqFriend"
android:text="wxFriendVideo" />
<Button
android:id="@+id/btn_qqFriend_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_wxFriend_video"
android:text="qqFriendVideo" />
<Button
android:id="@+id/btn_wxCircle_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn_wxFriend_video"
android:layout_toRightOf="@+id/btn_wxFriend_img"
android:text="wxCircleImg" />
</RelativeLayout>
其中微信的分享只能分享文字和圖片,不能單獨(dú)分享圖片或者文字。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
RecyclerView+SnapHelper實(shí)現(xiàn)無(wú)限循環(huán)篩選控件
這篇文章主要為大家詳細(xì)介紹了RecyclerView+SnapHelper實(shí)現(xiàn)無(wú)限循環(huán)篩選控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
TabLayout實(shí)現(xiàn)ViewPager指示器的方法
這篇文章主要為大家詳細(xì)介紹了TabLayout實(shí)現(xiàn)ViewPager指示器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Android 使用selector改變按鈕狀態(tài)實(shí)例詳解
這篇文章主要介紹了Android 使用selector改變按鈕狀態(tài)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01
Android協(xié)程作用域與序列發(fā)生器限制介紹梳理
協(xié)程的作用是什么?協(xié)程是一種輕量級(jí)的線程,解決異步編程的復(fù)雜性,異步的代碼使用協(xié)程可以用順序進(jìn)行表達(dá),文中通過(guò)示例代碼介紹詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-08-08
實(shí)例探究Android應(yīng)用編寫時(shí)Fragment的生命周期問(wèn)題
這篇文章主要介紹了Android應(yīng)用編寫時(shí)Fragment的生命周期問(wèn)題探究,resumed和paused以及stoped三種狀態(tài)的控制需要熟練掌握,需要的朋友可以參考下2016-02-02
Android LocationManager獲取經(jīng)度與緯度等地理信息
這篇文章主要介紹了Android LocationManager獲取經(jīng)度與緯度等地理信息的相關(guān)資料,希望通過(guò)本站大家能掌握這樣的知識(shí),需要的朋友可以參考下2017-09-09
Android實(shí)現(xiàn)水波紋效果實(shí)例代碼
大家好,本篇文章主要講的是Android實(shí)現(xiàn)水波紋效果實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02

