Firebase の環境とプロジェクトの作成方法 9.6.1 を使用する場合 エミュレータ : SDK Manager で最新に更新 実機 : Google Play 開発者サービスを最新に更新 Firebase ドキュメント : Android でファイルをアップロードする実行中の画面は、putBytes で、ギャラリーは putFile でアップロード可能です(putStream もあります)。Firebase storage のルールはテスト時のみ、allow write: if true; に変更して行いました。 Firebase リファレンス : StorageReference
public class MainActivity extends AppCompatActivity { private static final int READ_REQUEST_CODE = 42; private FirebaseStorage storage; private StorageReference storageRef; private StorageReference imageRef; private ProgressDialog progress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ▼ テスト用のルール // service firebase.storage { // match /b/freebase-654b7.appspot.com/o { // match /{allPaths=**} { // allow read; // allow write: if true; // } // } // } // アップロード中のダイアログ progress = new ProgressDialog(MainActivity.this); storage = FirebaseStorage.getInstance(); storageRef = storage.getReferenceFromUrl("gs://freebase-654b7.appspot.com/"); // 現在の画面をアップロード( View ) Button captureButton = (Button) MainActivity.this.findViewById(R.id.captureButton); captureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // View から Bitmap 取得 View view = v.getRootView(); // 画面全体 view.setDrawingCacheEnabled(true); Bitmap cache = view.getDrawingCache(); Bitmap rootViewCapture = Bitmap.createBitmap(cache); view.setDrawingCacheEnabled(false); // 画像アップロード用パス決定 Calendar cal = Calendar.getInstance(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd_HHmmss"); String uploadImagePath = String.format("image/%s.png",sf.format(cal.getTime())); imageRef = storageRef.child(uploadImagePath); // byte[] に変換 ByteArrayOutputStream baos = new ByteArrayOutputStream(); rootViewCapture.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] data = baos.toByteArray(); // アップロード中の表示 progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); progress.setMessage("画像をアップロードしています"); progress.show(); UploadTask uploadTask = imageRef.putBytes(data); uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { progress.dismiss(); Log.i("lightbox","アップロードに成功しました"); long size = taskSnapshot.getMetadata().getSizeBytes(); Log.i("lightbox",String.format("サイズ : %d",size)); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { progress.dismiss(); Log.i("lightbox","アップロードに失敗しました"); } }); } }); // ギャラリーの画像をアップロード Button galleryButton = (Button) MainActivity.this.findViewById(R.id.galleryButton); galleryButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, READ_REQUEST_CODE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // ギャラリーからの戻り if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) { Uri uri = null; if (data != null) { // Uri が戻されます uri = data.getData(); Log.i("lightbox", "Uri: " + uri.toString()); // 画像アップロード用パス決定 ContentResolver contentResolver = MainActivity.this.getContentResolver(); Cursor cursor = contentResolver.query(uri, null, null, null, null); cursor.moveToFirst(); // とりあえず固定( 2 => _display_name ) String name = cursor.getString(2); Log.i("lightbox", "FileName: " + name); //この カーソルの詳細 String[] columnName = cursor.getColumnNames(); for(int i = 0; i < columnName.length; i++) { Log.i("lightbox", String.format("%d : %s : %s",i, columnName[i], cursor.getString(i))); } String uploadImagePath = String.format("image/%s",name); imageRef = storageRef.child(uploadImagePath); // アップロード中の表示 progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); progress.setMessage("画像をアップロードしています"); progress.show(); // 画像アップロード UploadTask uploadTask = imageRef.putFile(uri); uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { progress.dismiss(); Log.i("lightbox","アップロードに成功しました"); long size = taskSnapshot.getMetadata().getSizeBytes(); Log.i("lightbox",String.format("サイズ : %d",size)); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { progress.dismiss(); Log.i("lightbox","アップロードに失敗しました"); } }); } } } }
build.gradle(Project)
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.google.gms:google-services:3.0.0' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
build.gradle(Module: app)
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "23.0.3" defaultConfig { applicationId "lightbox.sep.fire1" minSdkVersion 19 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.google.firebase:firebase-core:9.6.1' compile 'com.google.firebase:firebase-storage:9.6.1' compile 'com.google.firebase:firebase-auth:9.6.1' } apply plugin: 'com.google.gms.google-services'
※ AndroidManifest.xml には、android.permission.INTERNET を設定
|
【2016 Android Studioの最新記事】
- Android Studio で Twitter4J で ListView に検索結果を表示する
- Android Studio で Twitter4J で画像付きツイート
- 内部ストレージを起点とした画像データの処理 / Android
- カメラを起点とした画像データの処理 / Android
- バグ : Android Studio 2.2.2 で、spinnerMode を dialog に設定すると app:spinnerMode となってしまいます
- ListView + カスタム ArrayAdapter + ViewSwitcher + Firebase API + Data Binding : 更新処理 / Android Studio
- Android : 画像関連のテスト用カメラアプリ
- Firebase storage の画像を ファイルとしてダウンロードして ギャラリーに保存する( ImageView にも表示する ) / Android
- Firebase storage の画像の URL を取得して、通常と同様に Stream でダウンロードして ImageView に表示する / Android
- Firebase storage の画像をメモリに直接ダウンロードして ImageView に表示する / Android
- Android : Firebase の データを REST API の PUT コマンドで更新する
- Firebase API + Android Studio : Database のデータを Java に取得する方法は3通りあります。(orderByChild 使う場合は、getChildren ..
- Android : Data Binding + Firebase API で ListView にデータを表示する
- Firebase API + Android Studio : Database 処理の基本設定
- Android Studio 2.2 で新規プロジェクトを作成すると『Could not reserve enough space for 1572864KB object heap』というエラーが出..
- Firebase API + Android Studio : Database にデータを保存は単純で、DatabaseReference の setValue メソッドを使用します