android程序如果要分享到微博之类的社交平台,一般有两种选择,第一种是进入各个平台的开发网站,下载并整合该平台的API,这种比较繁琐,一般都有种种限制,而且API提供的接口我们往往只用很少的几个。第二种是使用大公司二次整合的API,这里备份下友盟社会化分享组件的基本使用。
github:
【 https://github.com/cstriker1407/android/tree/master/HelloWeibo 】
CONTENTS
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; } }
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。
发表评论