Bonjour. Dans la continuité de Dernière fois, je vais vous expliquer le fonctionnement de stockage d'Android. Cette fois, le contenu est de sauvegarder / charger des images sur le stockage externe, mais je vais essayer de le réaliser de manière aussi proche que possible de la sauvegarde / lecture précédente des fichiers sur le stockage externe.
Comme je l'ai mentionné à chaque fois, le contenu de chaque article sur les commentaires Android est légèrement différent, et je pense que certaines personnes peuvent se perdre, alors j'essaie d'écrire une méthode standard.
L'environnement de développement est le suivant. *Android Studio 4.0.1 *targetSdkVersion 28 *Google Nexus 5x
L'histoire de la sauvegarde sur le stockage externe précédente a été décrite en détail, je vais donc l'omettre. Cette fois également, nous traiterons de la lecture et de l'écriture dans la zone spécifique à l'application du stockage externe.
L'explication est basée sur l'hypothèse qu'un dossier d'actifs est créé sous le répertoire principal d'Android et que picture.jpg est placé. Le dossier d'actifs est créé en cliquant avec le bouton droit de la souris sur ** [main] → [Nouveau] → [Dossier] → [Dossier d'actifs] **.
Maintenant, récupérez le chemin du dossier que vous souhaitez enregistrer dans le stockage externe et créez le chemin avec le nom du fichier.
this.imgName = "picture.jpg ";
this.path = getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString();
this.file = this.path + "/" + this.fileName;
En conséquence, la chaîne de caractères "/ sdcard / Android / data / nom du package / files / PICTURES / picture.jpg " est affectée à la variable de fichier.
Ensuite, chargez le fichier image à partir du dossier Asset.
AssetManager assetManager = getResources().getAssets();
InputStream inputStream = assetManager.open(imgName);
Enregistrez le fichier image lu dans le stockage externe. Le tableau d'octets du fichier image est acquis par ```inputStream.read (buffer) `` `. Le tableau d'octets est écrit dans un fichier qui enregistre 1024 octets dans le stockage externe.
FileOutputStream fileOutputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
while (true){
int len = inputStream.read(buffer);
if (len < 0){
break;
}
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.flush();
Pour charger une image, ouvrez le flux avec le type InputStream
. Ensuite, utilisez BitmapFactory.decodeStream () '' pour obtenir l'image en tant que type
Bitmap ''. Après cela, réglez-le sur imageView
avec `setImageBitmap ()`
.
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.keita.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="200dp"
android:text="Save File"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:text="Read File"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button1" />
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2"/>
</android.support.constraint.ConstraintLayout>
MainActivity.java
package com.example.keita.myapplication;
import android.Manifest;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
private String file;
private String path;
public String state;
private String imgName = "picture.jpg ";
private Button button1;
private Button button2;
public ImageView imageView;
private final String[] PERMISSIONS = {
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private final int REQUEST_PERMISSION = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.button1 = findViewById(R.id.button1);
this.button2 = findViewById(R.id.button2);
this.imageView = findViewById(R.id.imageView);
this.path = getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString();
this.file = this.path + "/" + this.imgName;
checkPermission();
}
private void checkPermission(){
if (isGranted()){
setEvent();
}
else {
requestPermissions(PERMISSIONS, REQUEST_PERMISSION);
}
}
private boolean isGranted(){
for (int i = 0; i < PERMISSIONS.length; i++){
//La première fois, c'est PERMISSION_Retours REFUSÉS
if (checkSelfPermission(PERMISSIONS[i]) != PackageManager.PERMISSION_GRANTED) {
//Renvoie true si la demande est rejetée une fois. Renvoie false pour la première fois ou lorsque "Ne plus afficher" est sélectionné.
if (shouldShowRequestPermissionRationale(PERMISSIONS[i])) {
Toast.makeText(this, "Autorisation requise pour exécuter l'application", Toast.LENGTH_LONG).show();
}
return false;
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION){
checkPermission();
}
}
private void setEvent(){
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
saveFile(file);
}
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)){
readFile(file);
}
}
});
}
private void saveFile(String file){
try {
AssetManager assetManager = getResources().getAssets();
InputStream inputStream = assetManager.open(imgName);
FileOutputStream fileOutputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
while (true){
int len = inputStream.read(buffer);
if (len < 0){
break;
}
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void readFile(String file){
try {
InputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Recommended Posts