好记性不如铅笔头

android, 编程

Android应用开发笔记:分享至微博及友盟的基本使用

android程序如果要分享到微博之类的社交平台,一般有两种选择,第一种是进入各个平台的开发网站,下载并整合该平台的API,这种比较繁琐,一般都有种种限制,而且API提供的接口我们往往只用很少的几个。第二种是使用大公司二次整合的API,这里备份下友盟社会化分享组件的基本使用。

github:

https://github.com/cstriker1407/android/tree/master/HelloWeibo 】

1)下载开发文档和注册账号,获取KEY

友盟社会化组件开发文档【 http://dev.umeng.com/social/android/share/specific-integration 】

友盟的开发文档还是比较全的。

KEY:

2)将指定的res和libs拷入

按照要求将指定的res和libs拷入工程。

3)修改AndroidManifestx.xml文件,添加相关权限

  <!-- ###################声明SDK使用的相关权限###################### -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 检测网络状态 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 获取用户手机的IMEI,用来唯一的标识用户。 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 缓存资源优先存入SDcard -->
    <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据。 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于评论模块分享位置信息 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 用于评论模块分享位置信息 -->

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="yeah.cstriker1407.android.share.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- ###################注册SDK使用的Activity###################### -->
        <!-- 分享编辑页 -->
        <activity
            android:name="com.umeng.socialize.view.ShareActivity"
            android:configChanges="orientation|keyboard"
            android:launchMode="singleTask"
            android:noHistory="true"
            android:theme="@style/Theme.UMDialog"
            android:windowSoftInputMode="stateVisible|adjustResize" >
        </activity>

        <!-- ############ QQ空间和QQ SSO授权的Activity注册 ############ -->
        <activity android:name="com.tencent.tauth.AuthActivity" />

        <!-- ###################添加UmengAppkey###################### -->
        <meta-data
            android:name="UMENG_APPKEY"
            android:value="XXXX" >
        </meta-data>
    </application>

 4)页面和代码

activity_main.xml

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10" >
    <requestFocus />
</EditText>

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="选择发送平台" />

<Button
    android:id="@+id/button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="修改后发送新浪微博" />

<Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="直接发送新浪微博" />

<Button
    android:id="@+id/button4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="本地是否认证" />

<Button
    android:id="@+id/button5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="删除本地认证" />

<Button
    android:id="@+id/button6"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="新浪认证" />

<Button
    android:id="@+id/button7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="android默认" />

MainActivity.java

public class MainActivity extends Activity implements OnClickListener {
	
	private EditText editText;
	private Button button1;
	private Button button2;
	private Button button3;
	private Button button4;
	private Button button5;
	private Button button6;
	private Button button7;
	
	final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share",
            RequestType.SOCIAL);
	
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.editText);
        button1 = (Button)findViewById(R.id.button1);
        button2 = (Button)findViewById(R.id.button2);
        button3 = (Button)findViewById(R.id.button3);
        button4 = (Button)findViewById(R.id.button4);
        button5 = (Button)findViewById(R.id.button5);
        button6 = (Button)findViewById(R.id.button6);
        button7 = (Button)findViewById(R.id.button7);
        
        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);
        button5.setOnClickListener(this);
        button6.setOnClickListener(this);
        button7.setOnClickListener(this);    
    }

	@Override
	public void onClick(View v) 
	{
		switch (v.getId())
		{
		case R.id.button1:
		{
			// 设置分享内容
			mController.setShareContent(editText.getText().toString());
			// 设置分享图片, 参数2为图片的地址
			mController.setShareMedia(new UMImage(this,"http://www.umeng.com/images/pic/banner_module_social.png"));
			//设置分享图片,参数2为本地图片的资源引用
			//mController.setShareMedia(new UMImage(getActivity(), R.drawable.icon));
			//设置分享图片,参数2为本地图片的路径(绝对路径)
			//mController.setShareMedia(new UMImage(getActivity(), 
//			                                BitmapFactory.decodeFile("/mnt/sdcard/icon.png")));
	        
			
			// 设置分享平台选择面板的平台显示顺序
			// mController.getConfig().setPlatformOrder(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,
//			                                         SHARE_MEDIA.QZONE,SHARE_MEDIA.QQ, SHARE_MEDIA.SINA);
			// 打开平台选择面板,参数2为打开分享面板时是否强制登录,false为不强制登录
	        mController.openShare(this, false);			
			
			break;
		}
		case R.id.button2:
		{
			// 设置分享内容
			mController.setShareContent(editText.getText().toString());
			mController.postShare(MainActivity.this,SHARE_MEDIA.SINA, 
			        new SnsPostListener() {
			                @Override
			                public void onStart() {
			                    Toast.makeText(MainActivity.this, "开始分享.", Toast.LENGTH_SHORT).show();
			                }

			                @Override
			                public void onComplete(SHARE_MEDIA platform, int eCode,SocializeEntity entity) {
			                     if (eCode == 200) {
			                         Toast.makeText(MainActivity.this, "分享成功.", Toast.LENGTH_SHORT).show();
			                     } else {
			                          String eMsg = "";
			                          if (eCode == -101){
			                              eMsg = "没有授权";
			                          }
			                          Toast.makeText(MainActivity.this, "分享失败[" + eCode + "] " + 
			                                             eMsg,Toast.LENGTH_SHORT).show();
			                     }
			              }
			});
			
			
			break;
		}
		case R.id.button3:
		{
			// 设置分享内容
			mController.setShareContent(editText.getText().toString());
			mController.directShare(MainActivity.this, SHARE_MEDIA.SINA,
		            new SnsPostListener() {

		            @Override
		            public void onStart() {
		                Toast.makeText(MainActivity.this, "分享开始",Toast.LENGTH_SHORT).show();
		            }

		            @Override
		            public void onComplete(SHARE_MEDIA platform,int eCode, SocializeEntity entity) {
		                if(eCode == StatusCode.ST_CODE_SUCCESSED){
		                    Toast.makeText(MainActivity.this, "分享成功",Toast.LENGTH_SHORT).show();
		                }else{
		                    Toast.makeText(MainActivity.this, "分享失败",Toast.LENGTH_SHORT).show();
		                }
		            }
		    });
			break;
		}
		case R.id.button4:
		{			
			boolean isSina = OauthHelper.isAuthenticated(this,SHARE_MEDIA.SINA);
			Toast.makeText(this, "Sina:" + Boolean.toString(isSina), Toast.LENGTH_SHORT).show();
			break;
		}
		case R.id.button5:
		{
//			OauthHelper.remove(this, SHARE_MEDIA.SINA);
			mController.deleteOauth(this, SHARE_MEDIA.SINA, new SocializeClientListener() {
				@Override
				public void onStart()
				{
					Toast.makeText(MainActivity.this, "on start", Toast.LENGTH_SHORT).show();
				}
				
				@Override
				public void onComplete(int arg0, SocializeEntity arg1) 
				{
					Toast.makeText(MainActivity.this, "on complete", Toast.LENGTH_SHORT).show();
				}
			});
			
			boolean isSina = OauthHelper.isAuthenticated(this,SHARE_MEDIA.SINA);
			Toast.makeText(this, "Sina:" + Boolean.toString(isSina), Toast.LENGTH_SHORT).show();
			
			break;
		}
		case R.id.button6:
		{
			mController.doOauthVerify(this, SHARE_MEDIA.SINA, new UMAuthListener() {
			    @Override
			    public void onStart(SHARE_MEDIA platform) {
			        Toast.makeText(MainActivity.this, "授权开始", Toast.LENGTH_SHORT).show();
			    }

			    @Override
			    public void onError(SocializeException e, SHARE_MEDIA platform) {
			        Toast.makeText(MainActivity.this, "授权错误", Toast.LENGTH_SHORT).show();
			    }

			    @Override
			    public void onComplete(Bundle value, SHARE_MEDIA platform) {
			        Toast.makeText(MainActivity.this, "授权完成", Toast.LENGTH_SHORT).show();
			        //获取相关授权信息或者跳转到自定义的分享编辑页面
			        String uid = value.getString("uid");
			        
			    }

			    @Override
			    public void onCancel(SHARE_MEDIA platform) {
			        Toast.makeText(MainActivity.this, "授权取消", Toast.LENGTH_SHORT).show();
			    }
			} );
			
			
			break;
		}
		case R.id.button7:
		{
			ShareUtil.simpleShare(this, editText.getText().toString(), null);
		}
		default:
			break;
		}
	}    

 ShareUtil.java

public class ShareUtil
{
	public static boolean simpleShare(Context context, String text, String ImagePath)
	{
		if (null == text || text.trim().length() == 0)
		{
			return false;
		}

		Intent intent=new Intent(Intent.ACTION_SEND);
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
	    intent.putExtra(Intent.EXTRA_SUBJECT, "share");   
	    intent.putExtra(Intent.EXTRA_TITLE, "title");
	    intent.putExtra(Intent.EXTRA_TEXT, text);  
	    intent.setType("text/plain");
	    if (ImagePath != null && ImagePath.trim().length() != 0)
		{
	    	File file = new File(ImagePath.trim());
	    	if (file.canRead())
	    	{
	    		  intent.setType("image/*");
	    		  intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
	    	}
		}
		  context.startActivity(intent);
		  return true;
//        context.startActivity(Intent.createChooser(intent, "请选择"));   
	}
}

 备注:

1)友盟的社会化分享SDK提供的接口很易于使用,更高级的操作可以参考友盟的API。

Leave a Reply

4 × 2 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据