日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android判断sd u盘,[Android Framework]获取U盘 SD 状态

發布時間:2023/12/10 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android判断sd u盘,[Android Framework]获取U盘 SD 状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android 4.4 SD 和 U盤 的狀態

通過獲取StorageVolume 類來判斷 是sd還是U盤。我們來看一下這個類

package android.os.storage;

import android.content.Context;

import android.os.Parcel;

import android.os.Parcelable;

import android.os.UserHandle;

import com.android.internal.util.IndentingPrintWriter;

import java.io.CharArrayWriter;

import java.io.File;

/**

* Description of a storage volume and its capabilities, including the

* filesystem path where it may be mounted.

*

* @hide

*/

public class StorageVolume implements Parcelable {

// TODO: switch to more durable token

private int mStorageId;

private final File mPath;

private final int mDescriptionId;

private final boolean mPrimary;

private final boolean mRemovable;

private final boolean mEmulated;

private final int mMtpReserveSpace;

private final boolean mAllowMassStorage;

/** Maximum file size for the storage, or zero for no limit */

private final long mMaxFileSize;

/** When set, indicates exclusive ownership of this volume */

private final UserHandle mOwner;

private String mUuid;

private String mUserLabel;

private String mState;

// StorageVolume extra for ACTION_MEDIA_REMOVED, ACTION_MEDIA_UNMOUNTED, ACTION_MEDIA_CHECKING,

// ACTION_MEDIA_NOFS, ACTION_MEDIA_MOUNTED, ACTION_MEDIA_SHARED, ACTION_MEDIA_UNSHARED,

// ACTION_MEDIA_BAD_REMOVAL, ACTION_MEDIA_UNMOUNTABLE and ACTION_MEDIA_EJECT broadcasts.

public static final String EXTRA_STORAGE_VOLUME = "storage_volume";

// About storage volume format fs type

public static final String EXTRA_FORMAT_FSTYPE = "format_fstype";

public StorageVolume(File path, int descriptionId, boolean primary, boolean removable,

boolean emulated, int mtpReserveSpace, boolean allowMassStorage, long maxFileSize,

UserHandle owner) {

mPath = path;

mDescriptionId = descriptionId;

mPrimary = primary;

mRemovable = removable;

mEmulated = emulated;

mMtpReserveSpace = mtpReserveSpace;

mAllowMassStorage = allowMassStorage;

mMaxFileSize = maxFileSize;

mOwner = owner;

}

private StorageVolume(Parcel in) {

mStorageId = in.readInt();

mPath = new File(in.readString());

mDescriptionId = in.readInt();

mPrimary = in.readInt() != 0;

mRemovable = in.readInt() != 0;

mEmulated = in.readInt() != 0;

mMtpReserveSpace = in.readInt();

mAllowMassStorage = in.readInt() != 0;

mMaxFileSize = in.readLong();

mOwner = in.readParcelable(null);

mUuid = in.readString();

mUserLabel = in.readString();

mState = in.readString();

}

public static StorageVolume fromTemplate(StorageVolume template, File path, UserHandle owner) {

return new StorageVolume(path, template.mDescriptionId, template.mPrimary,

template.mRemovable, template.mEmulated, template.mMtpReserveSpace,

template.mAllowMassStorage, template.mMaxFileSize, owner);

}

/**

* Returns the mount path for the volume.

*

* @return the mount path

*/

public String getPath() {

return mPath.toString();

}

public File getPathFile() {

return mPath;

}

/**

* Returns a user visible description of the volume.

*

* @return the volume description

*/

public String getDescription(Context context) {

return context.getResources().getString(mDescriptionId);

}

public int getDescriptionId() {

return mDescriptionId;

}

public boolean isPrimary() {

return mPrimary;

}

/**

* Returns true if the volume is removable.

*

* @return is removable

*/

public boolean isRemovable() {

return mRemovable;

}

/**

* Returns true if the volume is emulated.

*

* @return is removable

*/

public boolean isEmulated() {

return mEmulated;

}

/**

* Returns the MTP storage ID for the volume.

* this is also used for the storage_id column in the media provider.

*

* @return MTP storage ID

*/

public int getStorageId() {

return mStorageId;

}

/**

* Do not call this unless you are MountService

*/

public void setStorageId(int index) {

// storage ID is 0x00010001 for primary storage,

// then 0x00020001, 0x00030001, etc. for secondary storages

mStorageId = ((index + 1) << 16) + 1;

}

/**

* Number of megabytes of space to leave unallocated by MTP.

* MTP will subtract this value from the free space it reports back

* to the host via GetStorageInfo, and will not allow new files to

* be added via MTP if there is less than this amount left free in the storage.

* If MTP has dedicated storage this value should be zero, but if MTP is

* sharing storage with the rest of the system, set this to a positive value

* to ensure that MTP activity does not result in the storage being

* too close to full.

*

* @return MTP reserve space

*/

public int getMtpReserveSpace() {

return mMtpReserveSpace;

}

/**

* Returns true if this volume can be shared via USB mass storage.

*

* @return whether mass storage is allowed

*/

public boolean allowMassStorage() {

return mAllowMassStorage;

}

/**

* Returns maximum file size for the volume, or zero if it is unbounded.

*

* @return maximum file size

*/

public long getMaxFileSize() {

return mMaxFileSize;

}

public UserHandle getOwner() {

return mOwner;

}

public void setUuid(String uuid) {

mUuid = uuid;

}

public String getUuid() {

return mUuid;

}

/**

* Parse and return volume UUID as FAT volume ID, or return -1 if unable to

* parse or UUID is unknown.

*/

public int getFatVolumeId() {

if (mUuid == null || mUuid.length() != 9) {

return -1;

}

try {

return Integer.parseInt(mUuid.replace("-", ""), 16);

} catch (NumberFormatException e) {

return -1;

}

}

public void setUserLabel(String userLabel) {

mUserLabel = userLabel;

}

public String getUserLabel() {

return mUserLabel;

}

public void setState(String state) {

mState = state;

}

public String getState() {

return mState;

}

@Override

public boolean equals(Object obj) {

if (obj instanceof StorageVolume && mPath != null) {

StorageVolume volume = (StorageVolume)obj;

return (mPath.equals(volume.mPath));

}

return false;

}

@Override

public int hashCode() {

return mPath.hashCode();

}

@Override

public String toString() {

final CharArrayWriter writer = new CharArrayWriter();

dump(new IndentingPrintWriter(writer, " ", 80));

return writer.toString();

}

public void dump(IndentingPrintWriter pw) {

pw.println("StorageVolume:");

pw.increaseIndent();

pw.printPair("mStorageId", mStorageId);

pw.printPair("mPath", mPath);

pw.printPair("mDescriptionId", mDescriptionId);

pw.printPair("mPrimary", mPrimary);

pw.printPair("mRemovable", mRemovable);

pw.printPair("mEmulated", mEmulated);

pw.printPair("mMtpReserveSpace", mMtpReserveSpace);

pw.printPair("mAllowMassStorage", mAllowMassStorage);

pw.printPair("mMaxFileSize", mMaxFileSize);

pw.printPair("mOwner", mOwner);

pw.printPair("mUuid", mUuid);

pw.printPair("mUserLabel", mUserLabel);

pw.printPair("mState", mState);

pw.decreaseIndent();

}

public static final Creator CREATOR = new Creator() {

@Override

public StorageVolume createFromParcel(Parcel in) {

return new StorageVolume(in);

}

@Override

public StorageVolume[] newArray(int size) {

return new StorageVolume[size];

}

};

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel parcel, int flags) {

parcel.writeInt(mStorageId);

parcel.writeString(mPath.toString());

parcel.writeInt(mDescriptionId);

parcel.writeInt(mPrimary ? 1 : 0);

parcel.writeInt(mRemovable ? 1 : 0);

parcel.writeInt(mEmulated ? 1 : 0);

parcel.writeInt(mMtpReserveSpace);

parcel.writeInt(mAllowMassStorage ? 1 : 0);

parcel.writeLong(mMaxFileSize);

parcel.writeParcelable(mOwner, flags);

parcel.writeString(mUuid);

parcel.writeString(mUserLabel);

parcel.writeString(mState);

}

}

這個類用來描述存儲狀態,有幾個重要的參數:

File mPath 路徑

mRemovable 是否可移除,(U盤,SD)返回 true

getDescription(context) 獲取設備的描述 "sd" 就是SD卡,“USB”就是usb設備

獲取存儲設備

mStorageManager = StorageManager.from(this);

final StorageVolume[] storageVolumes = mStorageManager.getVolumeList();

for (StorageVolume mVolume : storageVolumes) {

if(mVolume != null){

String description = mVolume.getDescription(context);

Log.d(getClass().getName(), "description is: " + description);

if(description != null && (description.contains("SD") || description.contains("sd"))){

//這是sd

}

else if(description != null && (description.contains("USB") || description.contains("usb")

|| description.contains("Usb"))){

//這是usb

}

}

}

}

存儲設備狀態和路徑

import android.os.storage.StorageManager;

import android.os.storage.StorageEventListener;

private StorageManager mStorageManager;

mStorageManager = StorageManager.from(this);

//注冊和反注冊

mStorageManager.registerListener(mStorageListener);

if (mStorageManager != null && mStorageListener != null) {

mStorageManager.unregisterListener(mStorageListener);

}

/**

*

* 監聽 path 路徑 oldState 上一個狀態 newState 當前狀態

* 所有狀態 mounted unmounted removed checking

*/

StorageEventListener mStorageListener = new StorageEventListener() {

@Override

public void onStorageStateChanged(String path, String oldState, String newState) {

Log.i("qkmin -voolesettings"," StorageEventListener Received storage state changed notification that " + path +

" changed state from " + oldState + " to " + newState);

}

};

總結

以上是生活随笔為你收集整理的android判断sd u盘,[Android Framework]获取U盘 SD 状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。