网站调用新浪微博内容(AXMLPrinter2.jar反编译新浪微博的开放程度,居然比新浪还要封闭)
优采云 发布时间: 2021-09-04 20:03网站调用新浪微博内容(AXMLPrinter2.jar反编译新浪微博的开放程度,居然比新浪还要封闭)
首先,我们需要使用AXMLPrinter2.jar反编译新浪微博的AndroidManifest.xml,找到显示用户信息的页面。反编译后的代码如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
打开反编译出来的a.xml,搜索userinfo,幸运的找到UserInfoActivity,如下图:
UserInfoActivity注册了两个intent-filters,第一个注册的url是sinaweibo://userinfo?uid=3444956000。有了这些信息,通过如下代码调用新浪微博客户端显示用户信息:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("sinaweibo://userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
但是以上代码的前提是用户已经安装了新浪微博客户端,否则运行时会报错。好在还有第二个,我们可以用下面的代码来调用:
var intent = new Intent(Intent.ActionView);
var uri = Android.Net.Uri.Parse("http://weibo.cn/qr/userinfo?uid=3444956000");
intent.SetData(uri);
var chooseIntent = Intent.CreateChooser(intent, "Weibo");
StartActivity(chooseIntent);
以上代码的效果是:
如果用户没有安装新浪微博,他会直接调用浏览器打开那个地址;如果用户已安装新浪微博,则会弹出如下对话框供用户选择:
我再次鄙视新浪微博的开放程度,即使这个功能没有开放。
本来打算用同样的方法在腾讯微信上做同样的功能,结果发现腾讯把显示微信账号的activity设置为私有android:exported="false",比新浪更封闭。无语了。 !