UC2POCKET 解決從UC到pocket的分享問題

----------2014 4 12更新---------------------

隨着新版UC和Pocket中文版的發佈,也不知道是哪方做出了改動,總之現在已經能直接從UC分享到Pocket了!速速更新吧哈哈,這個UC2Pocket也成爲了歷史,不再提供更新和維護

----------------------------------------------------------

不知道何時起UC已經不能分享到pocket了,作爲pocket和uc重度用戶,這絕逼不能忍

可能的情況就是UC的發送的intent與pocket的intent-filter不切合,UC2POCKET就是起到一個適配器的作用

先附上apk的地址,需要的童鞋就直接拿去吧UC2POCKET下載地址 百度盤


思路 利用apktools反編譯Pocket文件,得到它的manifest.xml關鍵代碼

    <activity android:theme="@style/Theme.Transparent.NoAnimation" android:label="@string/nm_add_to_ril" android:name="com.ideashower.readitlater.activity.AddActivity" android:configChanges="keyboardHidden|orientation|screenLayout|screenSize" android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
           <intent-filter android:label="@string/nm_add_to_ril">
               <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
	            </intent-filter>
	        </activity>
這就是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就會提示非有效的地址。。。在stackoverflow有個類似的問題http://stackoverflow.com/questions/16108356/share-to-pocket ,應該這個就是原因


再附上一個顯示bundle所有內容的函數,當時用於測試intent的內容時使用的

			Bundle b=midIntent.getExtras();
			Set<String> keySet =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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章