簡述
作為一個android小碼農,每次開發一個APP,都需要根據需求在網上找一些輪子,免得自己重復制作,畢竟android發展也算成熟了,網上的輪子一大推,哈哈哈...
不過雖然網上輪子多,但是如果每個APP都需要重新再網上找,就顯得麻煩了。
比如說android的獲取照片功能,以前每次都需要去網上重新找并且下載最新jar。
所以,自己就弄了個開源庫,以后用到就可以直接使用了,哈哈哈~~~
當然,此開源庫,主要還是參考了網上其他大神寫的庫來,自己封裝的。
此篇文章主要是寫使用教程,如果需要了解源碼的可以
下載JAR
功能
- 相機獲取圖片
- 相冊獲取圖片
- 剪切
- 壓縮
注意
本庫沒有適配android 6.0 以上動態權限,所以如果需要使用此庫前必須確保自己項目已經獲取到以下三個權限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
至于6.0動態權限的獲取可以參考其他開源庫,自己可以在github上查找,我就不列表出了,當然有時間,我還是會自己再封裝android 6.0以上動態權限庫的,敬請期待吧
用法
- 打開相機()
public void onCamera(View view) {
mTakeParam = new TakeParam(this);
startActivityForResult(TakeHelper.buildCameraIntent(mTakeParam), mTakeParam.REQUEST_CODE_CAMERA);
}
- 打開相機
public void onAlbum(View view) {
mTakeParam = new TakeParam(this);
startActivityForResult(TakeHelper.buildAlbumIntent(), mTakeParam.REQUEST_CODE_ALBUM);
}
- 剪切設置(默認為 true)
mTakeParam.isCrop = true;
- 壓縮設置(默認為 true)
mTakeParam.isCompress = true;
- 處理回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
TakeHelper.handleResult(this, mTakeParam, requestCode, resultCode, data);
}
- 實現ITakePhotoListener接口
public class MainActivity extends AppCompatActivity implements ITakePhotoListener {
private TakeParam mTakeParam;
.
..
...
@Override
public void onComplete(Uri uri) {
//獲取到圖片Uri,顯示在ImageView
mImageView.setImageURI(uri);
}
@Override
public void onCancel() {
//取消選擇
}
@Override
public void onFailed() {
//失敗回調
Toast.makeText(this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();
}
@Override
public void startCropIntent(Intent intent) {
//啟動剪切功能
startActivityForResult(intent, mParam.REQUEST_CODE_CROP);
}
- 最后,最好選擇在使用完畢時,選擇清理的緩存的照片,如下:
@Override
public void onComplete(Uri uri) {
mImageView.setImageURI(uri);
//TakeHelper.clearFile(this);
}
//或者
@Override
protected void onDestroy() {
TakeHelper.clearFile(this);
super.onDestroy();
}
適配android 7.0
- 方法1 -- 在Application類種添加以下代碼
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
}
}
- 方法二 (相對麻煩)
- 2.1 在AndroidManifest注冊provider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
- 2.2 在項目資源文件下創建xml 目錄,并且在xml目錄下創建一個文件,文件名需要和上一步resource屬性的文件名相對應,如:provider_paths,如下圖:
20170812223649.png
在上圖的五個標簽(files-path、cache-path、external-path、external-files-path、external-cache-path)可以根據自己緩存文件路徑選擇開啟哪幾個
其他
庫里面還有一些其他屬性可以自定,詳細情況可以查看
TakeParam
感謝:
本庫的設計模式主要是參考了已經停止維護的PhotoCropper