Android原生分享功能的思考与实现

    xiaoxiao2021-04-14  62

    1.使用Intent调用andoird原生的分享功能;

    2.使用第三方的sdk,比如ShareSdk或者友盟;

    3.去对应的平台下载jar包,参考官方设计文档写出自己的分享demo,但这种一般也比较复杂,尤其搞不懂qq和微信一家公司的,为什么微信那么麻烦。

    不废话了,直接上代码:

    一. 新建ShareUtil.Java类

    [java]  view plain  copy  print ? <span style="font-size:14px;">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);           }              /**       * 分享网页       */       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();           }       }              /**        * 分享音乐        */       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, "请先安装应用app"1500).show();               return false;           }       }              /**       * 跳转官方安装网址       */       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;           }       }   }</span>  

    二. MainActivity.java类

    [java]  view plain  copy  print ? <span style="font-size:14px;">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"这是一条分享信息",                       "分享标题""分享主题");               break;           // 微信&文字           case R.id.btn_wx:               shareUtil.shareText("com.tencent.mm"null"这是一条分享信息""分享标题",                       "分享主题");               break;           // 所有&文字           case R.id.btn_more:               shareUtil.shareText(nullnull"这是一条分享信息""分享标题""分享主题");               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/""分享标题""分享主题");               } 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/""分享标题""分享主题");               } 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;           }       }   }</span>  

    三.布局文件activity_main.xml

    [java]  view plain  copy  print ? <span style="font-size:14px;"><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></span>  

    其中微信的分享只能分享文字和图片,不能单独分享图片或者文字。

    转载请注明原文地址: https://ju.6miu.com/read-669961.html

    最新回复(0)