2012-02-21 28 views
18

Tôi đang tạo một ứng dụng, kéo tập tin (Đã lưu bởi ứng dụng android) từ sdcard thiết bị của adb. Vấn đề là các thiết bị khác nhau, có thư mục sdcard khác nhauNhận thư mục sdcard theo adb

ví dụ:

  • sdcard
  • sdcard/external_sd

Trước hết tôi phát minh làm theo giải pháp:

  1. chạy adb shell
  2. ls
  3. Kiểm tra nếu dir "sdcard" tồn tại
  4. Nếu có chạy sdcard/ls và kiểm tra xem external_sd tồn tại
  5. giá trị trả về.

Nhưng vấn đề là tôi có hai thiết bị samsung GT-I9100GT-I9000 và cả hai đều có một thư mục sdcard/external_sd. Khi tôi kiểm tra System.getenv("EXTERNAL_STORAGE"), một trả lại là sdcard và một số khác là sdcard/external_sd. Tôi cần kéo tệp đã được lưu trước đó vào System.getenv("EXTERNAL_STORAGE").

Vì vậy, câu hỏi đặt ra là: có lệnh nào để lấy thư mục sdcard trực tiếp từ adb mà không cần truy cập mã Android không?

Hoặc có thể tôi có thể bắt đầu hoạt động với sự khởi đầu của adb và nhận lại giá trị ? Điều này có thể không?

EDIT: Tìm thấy giải pháp:

adb shell echo $EXTERNAL_STORAGE 
+0

bạn có thể muốn thoát $ – Blackbelt

+0

Khi tôi đang sử dụng 'adb shell echo $ EXTERNAL_STORAGE', nó tự động thoát khỏi $. Khi tôi làm theo cách này: 1. 'adb shell' 2.'echo $ EXTERNAL_STORAGE' Tôi phải kết thúc bằng' thoát' để thoát khỏi $ –

+0

Bản sao của http://android.stackexchange.com/q/14105/32571 – janot

Trả lời

24

Nếu tôi đã không hiểu lầm bạn, bạn đang tìm kiếm cái gì đó như:

[email protected]:~$ adb shell cd \$EXTERNAL_STORAGE 
[email protected]:~$ adb shell ls \$EXTERNAL_STORAGE 
[email protected]:~$ adb shell echo \$EXTERNAL_STORAGE 
+1

Tìm thấy giải pháp "adb shell echo $ EXTERNAL_STORAGE" dựa trên bình luận của bạn, cảm ơn bạn. –

+0

bạn được chào đón – Blackbelt

0

của nó tốt hơn để sử dụng thay vì getExternalStorageDirectory()System.getenv("EXTERNAL_STORAGE") Điều này sẽ cung cấp cho bạn thư mục lưu trữ bên ngoài bất kể thiết bị.

+1

bất kể thiết bị? Bạn có nghĩa là System.getenv ("EXTERNAL_STORAGE") không thể hoạt động trên một số thiết bị? –

+0

getExternalStorageDirectory() nghĩa là lưu trữ ứng dụng bên ngoài, không phải bộ nhớ thiết bị bên ngoài. Google dường như đã có một kỷ nguyên thiết kế nơi bộ nhớ thiết bị mở rộng đã bị xóa khỏi Android. Họ đang đưa nó trở lại, nhưng kết quả là lộn xộn. Đăng Lollipop, gắn lưu trữ bên ngoài (sdcards, usb, ổ đĩa mạng, vv) nên thẳng về phía trước. –

+0

Tôi muốn truy cập sdcard từ kịch bản lệnh shell, câu trả lời này đã giúp tôi rất nhiều. Tôi không hiểu tại sao mọi người lại bỏ phiếu xuống ... –

15

Đối với giá trị của nó - sử dụng biến $ EXTERNAL_STORAGE có thể cho bạn kết quả gây hiểu lầm. Tôi có một máy tính bảng HP Slate tại đây, có bộ biến EXTERNAL_STORAGE được đặt thành/storage/sdcard0. Tuy nhiên khi sử dụng df (đĩa miễn phí) lệnh trên shell, hoặc thậm chí lệnh mount để hiển thị dung lượng trống hoặc gắn kết, sau trở nên rõ ràng:

[email protected]:/ $ df 
Filesystem    Size Used Free Blksize 
/dev     452.7M 36.0K 452.7M 4096 
/mnt/asec    452.7M 0.0 K 452.7M 4096 
/mnt/obb    452.7M 0.0 K 452.7M 4096 
/system    629.9M 468.5M 161.5M 4096 
/data     5.7 G 2.3 G 3.5 G 4096 
/cache    435.9M 16.4M 419.5M 4096 
/storage/sdcard0  5.7 G 2.3 G 3.5 G 4096 
/mnt/external_sd  29.3G 64.0K 29.3G 32768 

như vậy, thẻ sd bên ngoài là trong thực tế/mnt/external_sd , thay vì giá trị EXTERNAL_STORAGE trả về (là bộ nhớ trong)

+0

Đây phải là câu trả lời. Cảm ơn bạn John! –

Các vấn đề liên quan