UC2POCKET 解决从UC到pocket的分享问题
----------2014 4 12更新--------------------- 随着新版UC和Pocket中文版的发布,也不知道是哪方做出了改动,总之现在已经能直接从UC分享到Pocket了!速速更新吧哈哈,这个UC2Pocket也成为了历史,不再提供更新和维护 ------------------------------------
----------2014 4 12更新---------------------
随着新版UC和Pocket中文版的发布,也不知道是哪方做出了改动,总之现在已经能直接从UC分享到Pocket了!速速更新吧哈哈,这个UC2Pocket也成为了历史,不再提供更新和维护
----------------------------------------------------------
不知道何时起UC已经不能分享到pocket了,作为pocket和uc重度用户,这绝逼不能忍
可能的情况就是UC的发送的intent与pocket的intent-filter不切合,UC2POCKET就是起到一个适配器的作用
先附上apk的地址,需要的童鞋就直接拿去吧UC2POCKET下载地址 百度盘
思路 利用apktools反编译Pocket文件,得到它的manifest.xml关键代码
这就是pocket接收分享的intent-filter。
于是就照着这么写
Intent intent = new Intent(Intent.ACTION_SEND); intent.setClassName("com.pocket.cn","com.ideashower.readitlater.activity.AddActivity"); //intent.putExtra(Intent.EXTRA_SUBJECT, midIntent.getStringExtra(Intent.EXTRA_SUBJECT)); String originUrl=midIntent.getStringExtra(Intent.EXTRA_TEXT); intent.putExtra(Intent.EXTRA_TEXT, getUrlFromUCShare(originUrl)); intent.setType("text/plain"); intent.addCategory(Intent.CATEGORY_DEFAULT); if(MainActivity.isIntentAvailable(MainActivity.this, intent)){ MainActivity.this.startActivity(intent); }而
intent.setClassName("com.pocket.cn","com.ideashower.readitlater.activity.AddActivity");包名我是查钛备份得到,其实人家Manifest文件就有写着呢。。而activity名就是上面反编译得到Manifest.xml文件后就知道了。话说AddActivity这个名字简洁直观,大赞
关于接收UC的intent那就比较方便了,条件也不苛刻,我就直接从keep的filter那儿拷贝了过去,这里到时候再修改
从UC得到的extra-text是 网页名加上地址的,需要提取出地址 ,还没有验证混合的情况下会是什么情况
public static String getUrlFromUCShare(String originStr){ Pattern p=Pattern.compile("[a-zA-z]+://[^\\s]*"); Matcher matcher = p.matcher(originStr); if (matcher.find()) { String result= originStr.substring(matcher.start(), matcher.end()); return result; } else return null; }
另外开发中还遇到了 分享到pocket时候提示 不是有效的地址。后来发现原来是要求http:// 打头的。如果你直接分享www.google.com而不是http://www.google.com,那pocket就会提示非有效的地址。。。在*有个类似的问题http://*.com/questions/16108356/share-to-pocket ,应该这个就是原因
再附上一个显示bundle所有内容的函数,当时用于测试intent的内容时使用的
Bundle b=midIntent.getExtras(); SetkeySet =b.keySet(); //获取所有的Key, for(String key : keySet){ //bundle.get(key);来获取对应的value tvState.setText(tvState.getText()+key+" : "+midIntent.getStringExtra(key)+"\n");//开始 }
附上源码地址 在csdn code https://code.csdn.net/dashboard/index
推荐阅读
-
从HTML到node.js以及跨域问题的解决
-
Python中LOADDATAINFILE语句导入数据到MySQL遇到问题的解决方案分享
-
struts从2.3.X升级到2.5.18中遇到的问题及解决办法
-
从汉文帝到汉景帝,三位皇帝采取了哪些措施以解决诸侯王的问题?
-
标题中的引号分享到微信不识别问题解决
-
使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)
-
Sqoop将数据从oracle导入到hive时,数据错位的问题解决
-
SQLServer从nvarchar数据类型到datetime数据类型的转换产生一个超出范围值的问题解决
-
从安装mysql到初学时遇到的问题及解决方案
-
从HTML到node.js以及跨域问题的解决