PDA

View Full Version : نوشتن در حافظه داخلی گوشی



rubiks.kde
سه شنبه 14 خرداد 1392, 12:49 عصر
با سلام خدمت همه دوستان.
من قبلا یه برنامه برای گوشیم نوشته بودم که یه سری فایل از اینترنت دانلود میکرد و اون ها رو توی حافظه خارجی (SD card) ذخیره میکرد ، برای ذخیره کردن هم میومدم از کلاسهای خود آندورید استفاده میکردم و آدرس مموری رو پیدا میکردم بعد مینوشتم.

ولی الان که میخوام برنامه رو روی یه گوشی که حافظه خارجی (SD card) نداره اجرا کنم با مشکل برمیخورم و نمیتونم فایل رو ذخیره کنم.در واقع گوشی حافظه داخلی فقط داره .

حالا سوالم اینه که چطوری باید روی گوشی هایی که مموری خارجی ندارند و مموری داخلی ندارند فایل رو ذخیره کرد؟

باتشکر از همه

Modernidea
سه شنبه 14 خرداد 1392, 17:10 عصر
سلام

خوب شما در اصل دارید آدرس حافضه خارجی را به تابع میدید و خوب، همین باعث بروز مشکل میشه.

اول باید چک کنید که در صورتی که حافظه خارجی وجود نداشت (http://developer.android.com/guide/topics/data/data-storage.html#filesExternal)، با حافظه داخلی کار کنید.
http://stackoverflow.com/questions/9306155/writing-reading-files-to-from-android-phones-internal-memory
http://stackoverflow.com/a/8124723/478162

همچنین اجازه دسترسی را هم در Manifest تعیین کرده باشید:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />


موفق باشید.

rubiks.kde
سه شنبه 14 خرداد 1392, 23:09 عصر
من کارهایی که گفته بودید رو انجام دادم ولی نشد همش خطای java.io.IOException: Permission denied رو میده در حالی که این منیفستمه
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"/>

و اینم کد اون قسمت

File downdir = context.getDir("Wifi-ShareClient", 0);
if(!downdir.exists())
downdir.mkdirs();

this.saveDirectory = downdir.getAbsolutePath()+"/";

file = new File(saveDirectory + smbFile.getName()); //save directory

try {

if(!file.exists())
file.createNewFile();

که توی همین قسمت این خطا رو میده

rubiks.kde
سه شنبه 14 خرداد 1392, 23:29 عصر
یه سوال دیگه هم داشتم من الان موفق شدم فایل رو توی این ناحیه ذخیره کنم ولی چطوری باید بهش دسترسی داسته باشم منظورم استفاده از file manager هست چون الان این فایل در پوشه data/data/app.package/folder ایجاد شده ولی وقتی با file manager گوشی میرم توی این پوشه چیزی نیست ولی از اینکه فایل هست مطمئنم(روی emulator تست کردم)

rubiks.kde
چهارشنبه 15 خرداد 1392, 09:03 صبح
یه سوال دیگه هم داشتم واونم اینکه زمانی که ما SDcard داریم آدرسش هست /mnt/sdcard/ حالا توی گوشی هایی که اصلا حافظه خارجی ندارند و تنها حافظه داخلی دارند که یه مقدار خاصش در دسترس کاربرها هست چطور ؟ آدرس اون قسمت که در دسترس کربر هست چیه؟

برای مثال توی گوشی Xperia U که حافظه داخلی 8192 مگابایت و حافظه‌ی در دسترس کاربر 4096 مگابایت آدرس این قسمت که در دسترس هست چیه ؟

Modernidea
چهارشنبه 15 خرداد 1392, 09:24 صبح
یه سوال دیگه هم داشتم من الان موفق شدم فایل رو توی این ناحیه ذخیره کنم ولی چطوری باید بهش دسترسی داسته باشم منظورم استفاده از file manager هست چون الان این فایل در پوشه data/data/app.package/folder ایجاد شده ولی وقتی با file manager گوشی میرم توی این پوشه چیزی نیست ولی از اینکه فایل هست مطمئنم(روی emulator تست کردم)
اگر از آدرس مطمئنید؛ پس شاید فایل منیجر لیست فایل ها را ریفرش نکرده!
دقیق نمیدونم مشکل از کجاست. یه سری هم به این لینک بزنید شاید مشکل حل شد! http://stackoverflow.com/questions/5209842/read-write-file-to-internal-private-storage


یه سوال دیگه هم داشتم واونم اینکه زمانی که ما SDcard داریم آدرسش هست /mnt/sdcard/ حالا توی گوشی هایی که اصلا حافظه خارجی ندارند و تنها حافظه داخلی دارند که یه مقدار خاصش در دسترس کاربرها هست چطور ؟ آدرس اون قسمت که در دسترس کربر هست چیه؟

برای مثال توی گوشی Xperia U که حافظه داخلی 8192 مگابایت و حافظه‌ی در دسترس کاربر 4096 مگابایت آدرس این قسمت که در دسترس هست چیه ؟
گوشی خود من هم به همین شکل است. یعنی مموری جداگونه نمیخوره و 16 تا داخلی داره. اما این مقدار مموری همان مموری خارجی محسوب میشه و باید مثل یک حافظه خارجی با آن رفتار شود.

موفق باشید.

shahin bahari
پنج شنبه 16 خرداد 1392, 12:44 عصر
یه سوال دیگه هم داشتم من الان موفق شدم فایل رو توی این ناحیه ذخیره کنم ولی چطوری باید بهش دسترسی داسته باشم منظورم استفاده از file manager هست چون الان این فایل در پوشه data/data/app.package/folder ایجاد شده ولی وقتی با file manager گوشی میرم توی این پوشه چیزی نیست ولی از اینکه فایل هست مطمئنم(روی emulator تست کردم) اگر گوشی شما روت نشده باشه امکان دیدن محتوای فایل data رو ندارید و هر برنامه فقط به پوشه خودش دسترسی داره.

برای مثال توی گوشی Xperia U که حافظه داخلی 8192 مگابایت و حافظه‌ی در دسترس کاربر 4096 مگابایت آدرس این قسمت که در دسترس هست چیه ؟ اگر اشتباه نکنم بقیه اون حجم به صورت یه پارتیشن ext2 هستش که سیستم برای ذخیره رام و این حرف ها نگه داشته.


این پست رو که نوشتم برای خودم هم یه سوال ایجاد شد که چطور بین حافظه های خارجی مختلف فرق بزاریم؟! مثلا یه درایو دیگه با زدن فلش به گوشی ایجاد شده. حالا چطور باید بگیم منظور از external memory فلش دیسک هست یا sdcard ؟