image

前言:

最後一個作業是要做出一個自拍管理的App透過Content Provider來管理資料,還附有通知.從無到有其實很有趣的.我相信也能學到更多的東西,我希望能夠全部寫完,加油了.

筆記:

  • 關於使用App Action Bar會強制請你加入Android-support-V7的project.
    • 如果你是要讓Android V7~V10的App支援Action Bar,你必須要新增Android-support-V7的project並且新增相依專案.但是如果希望新增一個然後不要有這些的相依性問題的話,你需要利用以下設定建立.(同時符合大部分作業的需求在V18上)
      • Minimal Requirement V17
      • Target V19
      • Compitible with V18
    • 參考文章:
  • 如果要找default camera 在action menu的icon
  • 裡面主要透過Content Provider 的方式來達到資料的存取,並且增加了Notification的功能.
    • Alarm Manager 透過他呼叫起一個Intent然後來設定Notification.透過這個方式來達到,離開App之後,可以在固定時間後收到通知.
  • 關於讀取camera所拍照回來的照片檔案位址:
//指定時間作為檔名來另存新檔
PackageManager pm = getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
	Intent intent_camera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
	
	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
    String currentTimeStamp = dateFormat.format(new Date());
    File mFile = new File(Environment.getExternalStorageDirectory(), currentTimeStamp+".jpg");
    Uri outputFileUri = Uri.fromFile(mFile);
	intent_camera.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, outputFileUri);
	Toast.makeText(getBaseContext(), "File URI is "+outputFileUri, Toast.LENGTH_LONG).show();
	startActivityForResult(intent_camera, 0);
}
else {
	Toast.makeText(getBaseContext(), "Camera is not available", Toast.LENGTH_LONG).show();
}
  • 讀取縮圖並且直接設定到ListView裡面:
    • 關於這部分的我把它想得太複雜了,網路上不少作法推薦直接把檔案放進content provider裡面,但是這樣沒有辦法存取多個資料.
    • 最後其實就直接記住檔名(這裡檔名使用當下的時間,最後把圖片放進去BitmapDrawable就可以.
// 從content provide拿取檔案名稱
String photoContentUri = cursor.getString(cursor.getColumnIndex(DataContract.PIC_FILE_NAME));
// 與系統位置配對成完整檔案位置
File mFile = new File(Environment.getExternalStorageDirectory(), photoContentUri);

if (null != photoContentUri) {
    InputStream input = null;
    try {
    // 讀取縮圖
    	input = context.getContentResolver().openInputStream(Uri.fromFile(mFile));
    	if (input != null) {
    		photoBitmap = new BitmapDrawable(mApplicationContext.getResources(), input);
    		photoBitmap.setBounds(0, 0, mBitmapSize, mBitmapSize);
    	}
    } catch (FileNotFoundException e) {
    	Log.e(TAG, "FileNotFoundException");
    }
}
  • 由於點下去還要顯示完整大圖,這邊我也想得太複雜了.我以為還需要再增加一個新的activity,其實只要使用Intent就可以了
    //抓取圖片後,顯示新的Activity
    File mFile = new File(Environment.getExternalStorageDirectory(), fileName);
    Intent intent = new Intent();
    intent.setAction(android.content.Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(mFile), "image/jpg");
    startActivity(intent);

參考鏈結:


Evan

Attitude is everything