【android】 微信分享详解(分享到朋友和朋友圈)+ PopupWindow的使用和分析

一. 微信分享的实现:

1.到微信开放平台https://open.weixin.qq.com创创建应用申请AppID

2.下载签名生成工具,对签名不了解的自行百度,这里不做说明。

下面是简单的微信分享代码:

首先看一下包结构图

MainActivity:

public class MainActivity extends Activity {
    private static final String appid = "wx86b3d972e5ddd153";
    private IWXAPI wxApi;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wxApi = WXAPIFactory.createWXAPI(this, appid);
        wxApi.registerApp(appid); 

    }
 private void share(int flag){
        WXWebpageObject webpage = new WXWebpageObject();
        webpage.webpageUrl = "http://blog.csdn.net/yeyuehei/article/details/28854667";
        WXMediaMessage msg = new WXMediaMessage(webpage);
        msg.title = "test_myblog";
        msg.description = "test_myblog";
        //这里替换一张自己工程里的图片资源
        Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.rain);
        msg.setThumbImage(thumb);

        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction =buildTransaction("webpage");
        req.message = msg;
        req.scene = flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;
        boolean fla = wxApi.sendReq(req);
        System.out.println("fla="+fla);
    }

    private String buildTransaction(final String type) {
        return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
    }

WXEntryActivity:

package rain.share.wxapi;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import com.tencent.mm.sdk.openapi.BaseReq;
import com.tencent.mm.sdk.openapi.BaseResp;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.sdk.openapi.WXAPIFactory;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI api;
    // IWXAPI 是第三方app和微信通信的openapi接口
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, "wx86b3d972e5ddd153", false);
        api.handleIntent(getIntent(), this);
    }

    @Override
    public void onReq(BaseReq arg0) {
    }

    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                Toast.makeText(getApplicationContext(), "分享成功", Toast.LENGTH_LONG).show();
                System.out.println("success");
                this.finish();
               // 分享成功
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                //分享取消
                Toast.makeText(getApplicationContext(), "分享取消", Toast.LENGTH_LONG).show();
                System.out.println("ERR_USER_CANCEL");
                this.finish();
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                Toast.makeText(getApplicationContext(), "分享拒绝", Toast.LENGTH_LONG).show();
                System.out.println("ERR_AUTH_DENIED");
                this.finish();
                //分享拒绝
                break;
        }
    }
}  

微信分享朋友、朋友圈就这么简单....

最后我会贴出源码和签名文件的下载地址,及已经申请成功的appid号,供大家方便测试...

接下里是popWindow的使用:

1.主界面就是一个button按钮,就不填代码了.

2.popWindow界面搭建share_popwindow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/view_border"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="分享"
            android:textSize="25dp" />

        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:layout_margin="10dp"
            android:background="@android:color/holo_orange_light" />

        <Button
            android:id="@+id/first"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="5dp"
            android:background="@android:color/holo_blue_light"
            android:text="微信好友" />

        <Button
            android:id="@+id/second"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:background="@android:color/holo_blue_light"
            android:text="微信朋友圈" />
    </LinearLayout>

</LinearLayout>

3.我们这里实现popWindow从下往上出来,再点击popWindow外面,popWindow又从上往下消失

在res/下新建一个文件夹anim,进而anim下新建两个xml文件

pophidden_anim.xml    ;   popshow_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 动画效果->移动动画效果  -->
    <translate
        android:duration="1000"
        android:fromYDelta="0"
        android:toYDelta="50%p" />
    <!-- 动画效果->渐变透明度动画效果   -->
    <alpha
        android:duration="1000"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

4.在values/styles.xml加入以下代码:

    <!--  sharePopWindow -->
    <style name="share_popWindow_anim_style">
        <item name="android:windowEnterAnimation">@anim/popshow_anim</item>
        <!-- 指定显示的动画xml -->
        <item name="android:windowExitAnimation">@anim/pophidden_anim</item>
        <!-- 指定消失的动画xml -->
    </style>

5.接下来就是activity的代码了(注释的很详细了)...

/**
 * 显示popupWindow
 */
private void showPopWindow() {
    //获取view
    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.share_popwindow, null);

    //获取宽高
    popupWindow = new PopupWindow(view,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.WRAP_CONTENT);

    //设置popWindow弹出窗体可点击
    popupWindow.setFocusable(true);

    // 实例化一个ColorDrawable颜色为半透明
    ColorDrawable dw = new ColorDrawable(0xb0000000);
    popupWindow.setBackgroundDrawable(dw);

    // 设置popWindow的显示和消失动画
    popupWindow.setAnimationStyle(R.style.share_popWindow_anim_style);

    //在底部显示
    popupWindow.showAtLocation(MainActivity.this.findViewById(R.id.button),
            Gravity.BOTTOM,0,0);

    Button first = (Button) view.findViewById(R.id.first);
    Button second = (Button) view.findViewById(R.id.second);
    first.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            share(0);
            Toast.makeText(getApplicationContext(),"微信好友分享",Toast.LENGTH_LONG).show();
        }
    });
    second.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            share(1);
            Toast.makeText(getApplicationContext(),"微信朋友圈分享",Toast.LENGTH_LONG).show();
        }
    });

    //popWindow消失监听方法
    popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

        @Override
        public void onDismiss() {
            System.out.println("popWindow消失");
        }
    });
}

好了,到此结束...大神勿喷...

源代码+打包签名文工具+打包签名密码都在一起...

代码下载地址:微信分享详解(分享到朋友和朋友圈)+ PopupWindow的使用和分析

时间: 2024-10-07 12:12:50

【android】 微信分享详解(分享到朋友和朋友圈)+ PopupWindow的使用和分析的相关文章

【转】【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料

转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9057257 由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo.实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流.学习和参考,博主只求能和大家共同进步.希望能多多支持! 这篇文章中,我们使用到了Share SDK,它是为iOS.Android.WP8的APP提供社会化功能的一

分享Android NDK技术详解及应用(Android加壳图片处理性能优化)

1.课程研发环境案例源代码编译和运行环境以JDK1.7和android-sdk-23以及android-ndk-10e版本为基准, ,以下环境都适用于项目.开发工具:android studio 1.5正式版, QT 5.0,SourceInsight 3.5;其他工具:使用到了IDEA PRO工具以及www.androidxref.com网站查看分析源码.2.内容简介本课程主要讲解NDK技术的基本使用方法,如基本常用的JNI函数.Android系统中能使用的本地库的使用方法和注意事项以及GCC

Android SlidingMenu 使用详解

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/36677279 很多APP都有侧滑菜单的功能,部分APP左右都是侧滑菜单~SlidingMenu 这个开源项目可以很好帮助我们实现侧滑功能,如果对SlidingMenu 还不是很了解的童鞋,可以参考下本篇博客.将侧滑菜单引入项目的方式很多中,本博客先通过例子介绍各种引入方式,然后给大家展示个实例:主布局ViewPager,左右各一个侧滑菜单的用法,差不多已经能满足大部分应用的需求

android屏幕适配详解

android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_parent . 3.能够使用权重的地方尽量使用权重(android:layout_weight) 4.如果是纯色背景,尽量使用android的shape 自定义. 5.如果需要在特定分辨率下适配,可以在res目录上新建layout

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对

Android Service使用详解

Service是Android系统中的四大组件之一,主要有两个应用场景:后台运行和跨进程访问.Service可以在后台执行长时间运行操作而不提供用户界面,除非系统必须回收内存资源,否则系统不会停止或销毁服务.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC) 需要注意的是,Service是在主线程里执行操作的,可能会因为执行耗时操作而导致ANR 一.基础知识 Service可以分为以下三种形式

Android第三方登录详解1

android第三方登录是一种很流行的方式下面我来讲讲怎么做 1.打开百度搜   友盟 2.进入官网 注册 登录进入主页面 3.点击添加新应用 进入 4.提交  会生成一个K值 5.点击最上面的文档中心 进入 6.点击社会下分享  机器人 7.点击sdk下载 8.找到Android社会化组件sdk (看个人情况选择版本)点击下载 9.勾选要的第三方登录下载会下载一个压缩包 解压 10.点击最后一个jar包 11.现在对应android项目 填写对应K值点击快速集成  完了刷新android项目

Android中Context详解 ---- 你所不知道的Context

转载至 :http://blog.csdn.net/qinjuning 前言:本文是我读<Android内核剖析>第7章 后形成的读书笔记 ,在此向欲了解Android框架的书籍推荐此书. 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 因为我们真正的不懂Context

Android中Context详解 ---- 你所不知道的Context (转载)

Android中Context详解 ---- 你所不知道的Context (转载) http://blog.csdn.net/qinjuning 大家好,  今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中 时刻的在与它打交道,例如:Service.BroadcastReceiver.Activity等都会利用到Context的相关方法 : 说它陌生,完全是 因为我们真正的不懂Context的原理.类结构关系.一个简单的问题是,一个应用