MEMORIA INTERNA Y SDCARD ANDROID

3,980 views
Skip to first unread message

Carlos Sancho

unread,
Apr 30, 2013, 5:24:00 AM4/30/13
to desarrollad...@googlegroups.com
Hola:

Tengo una duda a cerca del almacenamiento en android. Si hago un programa, donde puedo guardar archivos, tiene que ser precisamente en esta ruta : 
/data/data/paquete_java/files/nombre_fichero
¿Puedo crear y leer archivos en la raíz de la memoria interna o necesito permisos específicos? 

Me da errores tambien al intentar leer un archivo situado en /mnt/sdcard .

Me puede explicar alguien como funciona esto¿?

Juan de Dios Maldonado Sánchez

unread,
Apr 30, 2013, 5:40:22 AM4/30/13
to desarrollad...@googlegroups.com
Si son archivos de uso interno de tu aplicación, y tu interés es que se eliminen de la tarjeta cuando se desinstale tu aplicación, entonces colócalos en el directorio que dices. (Pero no lo pongas "a mano". Utiliza las funciones que te ofrece Android para obtener la ruta)

Puedes crear y leer archivos en cualquier parte de la memoria interna siempre y cuando utilices los permisos necesarios, y NO codifiques las rutas "a mano".


2013/4/30 Carlos Sancho <sanchos...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/yhl8hIpe3VsJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Carlos Sancho

unread,
Apr 30, 2013, 6:15:36 AM4/30/13
to desarrollad...@googlegroups.com
Hola:
Gracias por responder.
Lo que intento hacer, es una aplicacion que haga una copia de seguridad de los datos de otra aplicacion, subiendolos a un ftp.
Los datos de esa aplicacion estan en la memoria interna , /Supernes/database/datos.txt.
El problema que me da, aparte de que no encuentra la ruta, tambien de permisos.
Es para el proyecto de fin de curso , haber si me puedes hechar una mano.
El metodo para aceder a la sd si que se cual es, pero para la memoria interna nose como obtener la ruta.
Y en cuanto a los permisos, tampoco se como darselos en memoria interna.
Mi codigo es este:

public class Obtenerfich extends AsyncTask<String, Float, Result>{

      protected void onPreExecute() {

         }
@Override
protected Result doInBackground(String... arg0) {
     
   BufferedInputStream buffer;
FTPClient ftpClient = new FTPClient();
       try {
        ftpClient.enterLocalActiveMode();
        ftpClient.connect(InetAddress.getByName(ip));  
ftpClient.login(user, pass);  
       ftpClient.changeWorkingDirectory("/public_html");
       ftpClient.setFileType(FTP.BINARY_FILE_TYPE);        
       rutaSd = Environment.getExternalStorageDirectory();
       rutaCompleta = new File( "/Supernes/database/", "datos.txt");
       buffer = new BufferedInputStream(new FileInputStream(rutaCompleta));
       ftpClient.enterLocalPassiveMode();
       ftpClient.storeFile("datos.txt", buffer);  
       buffer.close();
       ftpClient.logout();
       ftpClient.disconnect();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute (Result result){
}
}


Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/cJCTpaxQVnI/unsubscribe?hl=es. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android?hl=es.

Juan de Dios Maldonado Sánchez

unread,
Apr 30, 2013, 6:19:50 AM4/30/13
to desarrollad...@googlegroups.com
Pues desde ya te digo que no puedes acceder (sin permisos de root) a los datos de otras aplicaciones situados en memoria interna, a no ser que sean aplicaciones que tu también hayas desarrollado o que estas hayan establecido permisos para que cualquiera pueda acceder a su lectura (cosa que no sucede).

Si miras el logcat mientras ejecutas tu aplicación verás una descripción del error. (Que supongo que será que no tienes permiso)

Carlos Sancho

unread,
Apr 30, 2013, 6:27:09 AM4/30/13
to desarrollad...@googlegroups.com
El error es este : 

java.io.FileNotFoundException (Permission denied) 

la otra aplicacion no la he hecho yo, de todas formas no hay ninguna manera de hacerse pasar por root, modificar los permisos o alguna trampa para poder acceder a el ¿?

Juan de Dios Maldonado Sánchez

unread,
Apr 30, 2013, 6:33:37 AM4/30/13
to desarrollad...@googlegroups.com
Pues ya lo tienes... Permission denied

Ahora ya tienes que asumir que si quieres que tu aplicación funcione, sólo lo hará en dispositivos con el acceso "root" habilitado. Cosa que no ocurre con los dispositivos salidos de fábrica.

Si quieres leer un archivo, deberás ejecutar el siguiente comando utilizando Runtime.getRuntime().exec(....):

su -c cp /data/file.txt /mnt/sdcard

para copiar el archivo a la tarjeta, y ya desde ahí, sí que podrás leerlo y borrarlo cuando hayas terminado.


2013/4/30 Carlos Sancho <sanchos...@gmail.com>

Carlos Sancho

unread,
Apr 30, 2013, 6:41:16 AM4/30/13
to desarrollad...@googlegroups.com
Vale gracias.
La raiz de la memoria interna como se obtiene, por que si pongo / me va a la carpeta data.
En la sd si que se que es rutaSd = Environment.getExternalStorageDirectory();

Juan de Dios Maldonado Sánchez

unread,
Apr 30, 2013, 6:44:52 AM4/30/13
to desarrollad...@googlegroups.com
http://developer.android.com/guide/topics/data/data-storage.html

Para acceder a datos de otras aplicaciones tendrás que escribir la ruta a mano. (Android no está pensado para hacer esas cosas)


2013/4/30 Carlos Sancho <sanchos...@gmail.com>

Carlos Sancho

unread,
Apr 30, 2013, 7:39:43 AM4/30/13
to desarrollad...@googlegroups.com
Gracias

Carlos Sancho

unread,
Apr 30, 2013, 10:33:34 AM4/30/13
to desarrollad...@googlegroups.com
Hola:
Tambien estoy incluyendo la funcionalidad de linterna mi aplicacion, pero no me funciona: 

package com.example.linterna;


import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
 
public class AjpdSoftLinterna extends Activity {
 
   Camera camera = null;
   Parameters parameters;
   Button FlashLightControl;
 
   // Called when the activity is first created.
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_ajpd_soft_linterna);
 
      FlashLightControl = (Button)findViewById(R.id.flashcontrol);
      FlashLightControl.setOnClickListener(new View.OnClickListener(){
public void onClick(View view){
encender();
}
});
      
   }
 
   public void encender() {
      try{
         if(camera == null){
            camera = Camera.open();
            parameters = camera.getParameters();
            parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
            camera.setParameters(parameters);
         }else{
            parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
            camera.setParameters(parameters);
            camera.release();
            camera = null;
         }
      }catch(Exception e){
       Log.e("ERROR"+e,"Error!"+e, e);
      }
   }
 
   public void finish(){
      if (camera != null){
         parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
         camera.setParameters(parameters);
         camera.release();
         camera = null;
      }
      super.finish();
   }
}



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".AjpdSoftLinterna" >

    <Button
        android:id="@+id/flashcontrol"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="190dp"
        android:text="ON" />

</RelativeLayout>


<?xml version="1.0" encoding="utf-8"?>
    package="com.example.linterna"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="14" />
    
<uses-permission android:name="android.permission.CAMERA" />
  <uses-feature android:name="android.hardware.camera" android:required="true" />
  <uses-feature android:name="android.hardware.camera.autofocus" />
  <uses-permission android:name="android.permission.FLASHLIGHT"/>
  <uses-feature android:name="android.hardware.camera.flash" android:required="true" />

    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.linterna.AjpdSoftLinterna"
            android:label="@string/title_activity_ajpd_soft_linterna" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity>
    </application>
   
</manifest>

Lo estoy probando sobre un Motorola Rarz Maxx que si que permite usar el flash de linterna porque tengo aplicaciones descargadas que lo hacen, pero lo necesito en codigo, porque es para el proyecto de fin de curso.

Jonatan Cayon

unread,
Aug 28, 2013, 4:20:29 AM8/28/13
to desarrollad...@googlegroups.com
No se si ya lo has logrado, pero te digo.
En ese codigo lo que estas intentando es escribir un fichero en memoria externa.
Para acceder a la memoria externa en Android necesitas permisos de lectura de memoria externa en el manifest.
El permiso es:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
    </uses-permission>

Mira en http://www.sgoliver.net/blog/?p=2035 que te lo explica mejor.


2013/4/30 Carlos Sancho <sanchos...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/yhl8hIpe3VsJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/cJCTpaxQVnI/unsubscribe?hl=es. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Carlos Sancho

unread,
Aug 28, 2013, 5:33:07 AM8/28/13
to desarrollad...@googlegroups.com

Gracias
Ya lo consegui hacer.
Saludos

Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/cJCTpaxQVnI/unsubscribe. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.

Gabriel Pozo

unread,
Aug 28, 2013, 9:21:19 AM8/28/13
to desarrollad...@googlegroups.com
Carlos, nos podrías decir como lo has conseguido ? ;)


Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Carlos Sancho

unread,
Aug 28, 2013, 9:28:41 AM8/28/13
to desarrollad...@googlegroups.com
Hola:
Lo conseguí hacer usando la ruta completa y a mano. Se supone que la raíz es  /  y que la memoria interna es /mnt/sdcard     la externa es /mnt/sdcard-ext. entonces con esto ya te puedes mover por todo el móvil, sin olvidar los permisos de lectura y escritura que hay que darle en el archivo manifest.
Salu2


Jhonny Orellana

unread,
Jun 28, 2014, 11:29:18 PM6/28/14
to desarrollad...@googlegroups.com
olle yo estoy empezando a entrar en esto pero para hacer cualquier cosa antes quiero ser root en mi cel pero la verdad solo programo en c++ o cmd o cualquiero otra cosa de pc pero no en android ¿me ayudan? siempre que logre compartire programas que cree :)

Isaac Lira

unread,
Sep 11, 2014, 3:49:41 PM9/11/14
to desarrollad...@googlegroups.com
Hola juande, saludos. veras yo estoy en las mismas o parecida situacion que el joven aca. pasa que necesito copiar una carpeta completa desde mi aplicación con destino a archivo de sistemas android. tengo declarado los permisos de superusuario y solamente la utilizaran equipos rooteados. pasa que no se como hacer para copiar esa carpeta que esta en la carpeta /res/carrier de mi proyecto y pegarla en /android/carrier en la memoria interna del dispositivo... y si ya existe que la reemplace.

Gracias por contestar :) saludos y nuevamente gracias.


2013/4/30 Carlos Sancho <sanchos...@gmail.com>


2013/4/30 Carlos Sancho <sanchos...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/desarrolladores-android/-/yhl8hIpe3VsJ.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/desarrolladores-android/cJCTpaxQVnI/unsubscribe?hl=es. Para anular la suscripción a este grupo y todos sus temas, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android?hl=es.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages