1. 程式人生 > >微信分享注意的BUG

微信分享注意的BUG

微信分享對內容,標題長度和圖片都做了限制,尤其是圖片,不能大於32k,對於6.0.1的系統可能比這個範圍還要小,所以使用的圖片要注意大小,並且放在不同尺寸的檔案下(如果不做處理小圖片也可能不符合規定),為了保險起見,最後再用程式碼壓縮一下,下面是方法,轉自大神。

解決方案:使用Bitmap自帶的compress方法解決了這個問題

原始碼如下:

  1. <span style="font-size:14px;">package com.example.test;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.net.HttpURLConnection;  
  4. import java.net.URL;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7. import android.os.Message;  
  8. import android.widget.Toast;  
  9. import android.app.Activity;  
  10. import android.graphics.Bitmap;  
  11. import android.graphics.BitmapFactory;  
  12. publicclass MainActivity extends Activity {  
  13.     @Override
  14.     protectedvoid onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         new LoadPicThread("http://7xjp2s.dl2.z0.glb.qiniucdn.com/2015/07/01/2248c3025a9989f062ce8b8c52a72481_m.jpg",new Handler(){  
  18.             @Override
  19.             public
    void handleMessage(Message msg) {  
  20.                 byte[] bytes=(byte[]) msg.obj;  
  21.                 if(bytes.length>IMAGE_SIZE){  
  22.                     Toast.makeText(MainActivity.this"圖片尺寸太大"0).show();  
  23.                     return;  
  24.                 }  
  25.                 System.out.println("視訊截圖圖片長度:"+bytes.length);  
  26.             }  
  27.         }).start();  
  28.     }  
  29.     publicstaticfinalint IMAGE_SIZE=32768;//微信分享圖片大小限制
  30.     privateclass LoadPicThread extends Thread{  
  31.         private String url;  
  32.         private Handler handler;  
  33.         public LoadPicThread(String url,Handler handler){  
  34.             this.url=url;  
  35.             this.handler=handler;  
  36.         }  
  37.         @Override
  38.         publicvoid run(){  
  39.             try {  
  40.                 URL picurl = new URL(url);   
  41.                 HttpURLConnection conn = (HttpURLConnection)picurl.openConnection(); // 獲得連線 
  42.                 conn.setConnectTimeout(6000);//設定超時 
  43.                 conn.setDoInput(true);   
  44.                 conn.setUseCaches(false);//不快取 
  45.                 conn.connect();  
  46.                 Bitmap bmp=BitmapFactory.decodeStream(conn.getInputStream());  
  47.                 ByteArrayOutputStream output = new ByteArrayOutputStream();  
  48.                 bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);  
  49.                 int options = 100;  
  50.                 while (output.toByteArray().length > IMAGE_SIZE && options != 10) {   
  51.                     output.reset(); //清空baos
  52.                     bmp.compress(Bitmap.CompressFormat.JPEG, options, output);//這裡壓縮options%,把壓縮後的資料存放到baos中  
  53.                     options -= 10;  
  54.                 }  
  55.                 bmp.recycle();  
  56.                 byte[] result = output.toByteArray();  
  57.                 output.close();  
  58.                 Message message=handler.obtainMessage();  
  59.                 message.obj=result;  
  60.                 message.sendToTarget();  
  61.             } catch (Exception e) {  
  62.                 e.printStackTrace();  
  63.             }  
  64.         }  
  65.     }  
  66. }</span><span style="font-size: 18px;">  
  67. </span>  


主要開啟一個執行緒讀取伺服器圖片.用while迴圈壓縮圖片。。。圖片小於32k或者已經壓縮了9次退出迴圈

需要特別注意的是,安卓處理的圖片大小和電腦上顯示的不一樣,所以不要被電腦上圖片的大小誤導,其次,壓縮後的位元組沒有任何問題,但是通過bitmapfactory轉換成bitmap時,圖片大小又存在一定的放大作用,也就是如果一個圖片在接近的尺寸被壓縮,反而會變更大,這個bug非常坑,所以強烈建議控制壓縮的尺度要比要求低很多,比如微信得到32k,最好要求到30k以下。