標籤:android 融雲
一 拍照
目前拍照融雲提供兩種方案
1 SDK kit 包中內建的拍照 關鍵類 : CameraInputProvider
此類點擊是喚起 TakingPicturesActivity 特點是拍照後 勾選完成 會有一個預覽介面 此方案如果在某些機型上 點擊勾選後無響應 是因為
一些機型喚起 系統相機後 把下面的棧資源回收了 已經做了 onSaveInstanceState 的生命週期儲存瞬間狀態 但是還是偶現此情況
下面貼出實現代碼 如果有知道此問題終極解決方案的開發人員 歡迎留言 或者 聯絡筆者
public class TakingPicturesActivity extends Activity implements View.OnClickListener { private final static int REQUEST_CAMERA = 0x2; private ImageView mImage; private Uri mSavedPicUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.rc_ac_camera); Button cancel = (Button) findViewById(R.id.rc_back); Button send = (Button) findViewById(R.id.rc_send); mImage = (ImageView) findViewById(R.id.rc_img); cancel.setOnClickListener(this); send.setOnClickListener(this); RLog.d(this, "onCreate", "savedInstanceState : " + savedInstanceState); if(savedInstanceState == null) { startCamera(); } else { String str = savedInstanceState.getString("photo_uri"); if(str != null) { mSavedPicUri = Uri.parse(str); try { mImage.setImageBitmap(BitmapUtil.getResizedBitmap(this, mSavedPicUri, 960, 960)); } catch (IOException e) { e.printStackTrace(); } } } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onClick(View v) { final File file = new File(mSavedPicUri.getPath()); if (!file.exists()) { finish(); } if (v.getId() == R.id.rc_send) { if (mSavedPicUri != null) { Intent data = new Intent(); data.setData(mSavedPicUri); setResult(RESULT_OK, data); } finish(); } else if (v.getId() == R.id.rc_back) { finish(); } } private void startCamera() { Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); String name = System.currentTimeMillis() + ".jpg"; File file = new File(path, name); mSavedPicUri = Uri.fromFile(file); RLog.d(this, "startCamera", "output pic uri =" + mSavedPicUri); intent.putExtra(MediaStore.EXTRA_OUTPUT, mSavedPicUri); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivityForResult(intent, REQUEST_CAMERA); } @Override public void onActivityResult(int requestCode, int resultCode, final Intent data) { RLog.d(this, "onActivityResult", "resultCode = " + resultCode + ", intent=" + data); if (resultCode != Activity.RESULT_OK) { finish(); return; } switch (requestCode) { case REQUEST_CAMERA: if (resultCode == RESULT_CANCELED) { finish(); Log.e("TakingPicturesActivity","RESULT_CANCELED"); } if (mSavedPicUri != null && resultCode == Activity.RESULT_OK) { try{ mImage.setImageBitmap(BitmapUtil.getResizedBitmap(this, mSavedPicUri, 960, 960)); } catch (IOException e) { e.printStackTrace(); } } break; default: return; } super.onActivityResult(requestCode, resultCode, data); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { //還原 Log.e("TakingPicturesActivity","onRestoreInstanceState"); mSavedPicUri = Uri.parse(savedInstanceState.getString("photo_uri")); super.onRestoreInstanceState(savedInstanceState); } @Override public void onSaveInstanceState(Bundle outState) { //儲存 Log.e("TakingPicturesActivity","onSaveInstanceState"); outState.putString("photo_uri", mSavedPicUri.toString()); super.onSaveInstanceState(outState); }}
2 Demo 代碼中的 NewCameraInputProvider
此類拍照完成後 直接勾選即表示發出圖片到會話介面 無預覽介面 代碼目前在 融雲官網 Demo 已經開源 io/rong/app/provider/NewCameraInputProvider.java
如果您選擇 方案二的切換方式:
1 將 Demo 中的 io/rong/app/provider/NewCameraInputProvider.java 拷貝到自己工程中 注意一些細節 資源檔等
2 將設定自訂會話介面輸入bar + 號功能自訂註冊的 NewCameraInputProvider 詳情見
這裡解釋一下 第一個數組 是你需要展示哪些功能模組 下面設定的代碼 是你需要你定義的數組功能模組在哪些會話類型展示 這裡提醒一下 語音功能
voip 只支援單對單 設定這個時機在 RongIM.init 初始化以後即可
好了上述文章已經對拍照兩種方案 和 用法做了較為詳細的講述 如果還有哪些細節沒有講到歡迎留言 吐槽
二 相簿
目前融雲相簿也提供兩種方案 支援: jpeg png jpg bmp 等圖片格式
1 :SDK kit 預設內建 ImageInputProvider
功能分析: 效果很流暢 載入速度也很快 支援無上限多選圖片發送 和 預覽 ,缺點是 所有手機中的圖片全部在一個 GridView 裡面展示
無多檔案夾選擇 和 最近拍照
2 :Demo photo 包下代碼開源 核心類 PhotoCollectionsProvider
功能分析 : 採用 LruChe 緩衝技術 以空間換速度 載入速度快 支援多照片檔案夾選擇 支援最近拍照置頂的排序 代碼開源 可以根據自己
業務需求進行修改
相簿方案 2 的使用方式 :
1 將 Demo photo 整個包 拷貝到自己工程下 修改包名 記得資源檔 和 圖片也要拷貝
2 參考拍照那 調用的圖片 設定 PhotoCollectionsProvider 即可
此處圖片選擇 有個健壯性的問題沒有解決 有興趣的可以參考一下 http://blog.csdn.net/qq_19986309/article/details/47080287
如果有預驗證圖片有效性的解決方案 請聯絡筆者 或者 留言 不勝感激
相關連結 最後可以基於 +號功能模組自訂 自己來開發 如 相簿 拍照 地圖 等功能 如果有開發得更好的 功能模組 比如 百度 高德地圖定位 或者 更最佳化
的拍照 相簿選擇的模組願意開源 福利廣大融雲開發人員 請聯絡本人 留言 歡迎 pull request ! end~
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
融雲 Android SDK 拍照,圖片選取器方案分析