কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড ডিভাইসে উপলব্ধ স্টোরেজ স্পেস চেক করা

স্টোরেজ উপলব্ধতা যাচাই: StatFs এবং Formatter ব্যবহার

এই টিউটোরিয়ালটি দেখাবে কীভাবে ডিভাইসের ইন্টারন্যাল এবং এক্সটার্নাল স্টোরেজের মোট এবং উপলব্ধ স্পেস বাইট এবং হিউম্যান-রিডেবল ফরম্যাটে পাওয়া যায়।

পদক্ষেপ ১: প্রজেক্ট তৈরি করুন

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

পদক্ষেপ ২: লেআউট XML (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="8dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textAlignment="center" />

</LinearLayout>

পদক্ষেপ ৩: MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.text.format.Formatter;
import android.widget.TextView;
import java.io.File;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        // ১. এক্সটার্নাল স্টোরেজ (পাবলিক)
        File externalStorage = Environment.getExternalStorageDirectory();
        StatFs statExternal = new StatFs(externalStorage.getPath());
        
        long extTotalBytes = statExternal.getBlockSizeLong() * statExternal.getBlockCountLong();
        long extFreeBytes = statExternal.getBlockSizeLong() * statExternal.getAvailableBlocksLong();

        // ২. ইন্টারন্যাল স্টোরেজ (অ্যাপ ডেটা পার্টিশন)
        File internalStorage = Environment.getDataDirectory();
        StatFs statInternal = new StatFs(internalStorage.getPath());
        
        long intTotalBytes = statInternal.getBlockSizeLong() * statInternal.getBlockCountLong();
        long intFreeBytes = statInternal.getBlockSizeLong() * statInternal.getAvailableBlocksLong();

        // ৩. ফরম্যাটেড আউটপুট
        String extTotal = Formatter.formatFileSize(this, extTotalBytes);
        String extFree = Formatter.formatFileSize(this, extFreeBytes);
        String intTotal = Formatter.formatFileSize(this, intTotalBytes);
        String intFree = Formatter.formatFileSize(this, intFreeBytes);

        String result = String.format(
            "External Storage:\nTotal: %s\nFree: %s\n\nInternal Storage:\nTotal: %s\nFree: %s",
            extTotal, extFree, intTotal, intFree
        );
        
        textView.setText(result);
    }
}

গুরুত্বপূর্ণ পারমিশন ও সীমাবদ্ধতা

  • Android 10 (API 29) না əvvəl: `READ_EXTERNAL_STORAGE` পারমিশন দরকার `getExternalStorageDirectory()`-র জন্য।
  • Android 10 (API 29): `requestLegacyExternalStorage="true"` ম্যানিফেস্টে অ্যাপ্লিকেশন ট্যাগে (টেম্পোরারি)।
  • Android 11 (API 30+): Scoped Storage বাধ্যতামূলক। শুধু `getExternalFilesDir(null)` (অ্যাপ-স্পেসিফিক) এবং MediaStore এক্সেসযোগ্য।

আধুনিক পদ্ধতি: StorageManager (API 24+)

StorageManager storageManager = (StorageManager) getSystemService(STORAGE_SERVICE);
List volumes = storageManager.getStorageVolumes();

StringBuilder sb = new StringBuilder();
for (StorageVolume volume : volumes) {
    sb.append(volume.getDescription(this)).append("\n");
    sb.append("Primary: ").append(volume.isPrimary()).append("\n");
    sb.append("Removable: ").append(volume.isRemovable()).append("\n");
    sb.append("UUID: ").append(volume.getUuid()).append("\n");
    
    if (volume.isPrimary()) {
        try {
            long freeBytes = volume.createOpenDocumentTree().getFreeSpace();
            sb.append("Free: ").append(Formatter.formatFileSize(this, freeBytes)).append("\n");
        } catch (IOException e) { e.printStackTrace(); }
    }
    sb.append("\n");
}
textView.setText(sb.toString());

Formatter.formatFileSize() আউটপুট উদাহরণ

  • 1024 → "1 KB"
  • 1048576 → "1 MB"
  • 1073741824 → "1 GB"
  • লোকেল-অוয়েয়ার (বাংলা লোকেলে "১ GB" দেখাবে)

ব্যবহারের পরিস্থিতি

  • বড় ফাইল ডাউনলোড/রেকর্ড করার আগে স্পেস চেক
  • ক্যাশ ক্লিয়ার সুপারিশ দেখানো
  • স্টোরেজ Анаলিটিক্স ড্যাশবোর্ড
  1. এন্ড্রয়েডে ডিভাইস চার্জিং সংযুক্ত কিনা তা জানার উপায়

  2. Android-এ ConcurrentLinkedDeque-এ এলিমেন্ট উপস্থিত কিনা যাচাই করার পদ্ধতি

  3. এন্ড্রয়েড ডিভাইসে ফোন কল শনাক্ত করার পদ্ধতি

  4. অ্যান্ড্রয়েডে EditText খালি কিনা চেক করার পদ্ধতি