Fotocamera Android: l'intento dei dati restituisce null


132

Ho un'applicazione Android che contiene più attività.

In uno di essi sto usando un pulsante che chiamerà la fotocamera del dispositivo:

public void onClick(View view) {
    Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(photoIntent, IMAGE_CAPTURE);
}

Nella stessa attività chiamo il OnActivityResultmetodo per il risultato dell'immagine:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == IMAGE_CAPTURE) {
        if (resultCode == RESULT_OK) {
            Bitmap image = (Bitmap) data.getExtras().get("data");
            ImageView imageview = (ImageView) findViewById(R.id.pic);
            imageview.setImageBitmap(image);
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
        }
    }
}

Il problema è che l'intento dataè nullo e il OnActivityResultmetodo passa direttamente a (resultCode == RESULT_CANCELED)e l'applicazione torna alla avtivity precedente.

Come posso risolvere questo problema e dopo aver chiamato la fotocamera, l'applicazione torna all'attività corrente che contiene una ImageViewche conterrà la foto scattata?

Grazie


dai un'occhiata a questa risposta stackoverflow.com/questions/18120775/…
Praveen Sharma,

Risposte:


218

L'applicazione fotocamera Android predefinita restituisce un intento non nullo solo quando si passa indietro una miniatura nell'intento restituito. Se si passa EXTRA_OUTPUTcon un URI in cui scrivere, verrà restituito un nullintento e l'immagine si trova nell'URI in cui è stato passato.

Puoi verificarlo guardando il codice sorgente dell'app della fotocamera su GitHub:

Immagino che o stai passando in EXTRA_OUTPUTqualche modo, o l'app della fotocamera sul tuo telefono funziona in modo diverso.


12
come aggiusterò la funzionalità put Extra, che dà l'intento non nullo in camera onActivityResult
Abdul Wahab

Risposta davvero utile Vorrei poter accettare che gli altri trovino la soluzione in modo più efficiente.
user1160020,

1
Eccezionale ! Grazie mille per la spiegazione :) +100
Muhammad Riyaz,

Il link che hai pubblicato non è più valido.

4
Potremmo invertire la classe di telecamere e cambiare semplicemente quel metodo per consentire entrambi, o è più difficile di così?
Tanner Summers,

16

Ho trovato una risposta facile. Funziona!!

private void openCameraForResult(int requestCode){
    Intent photo = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri uri  = Uri.parse("file:///sdcard/photo.jpg");
    photo.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
    startActivityForResult(photo,requestCode);
}

if (requestCode == CAMERA_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            File file = new File(Environment.getExternalStorageDirectory().getPath(), "photo.jpg");
            Uri uri = Uri.fromFile(file);
            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                bitmap = cropAndScale(bitmap, 300); // if you mind scaling
                profileImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

se desideri ritagliare e ridimensionare questa immagine

public static  Bitmap cropAndScale (Bitmap source, int scale){
    int factor = source.getHeight() <= source.getWidth() ? source.getHeight(): source.getWidth();
    int longer = source.getHeight() >= source.getWidth() ? source.getHeight(): source.getWidth();
    int x = source.getHeight() >= source.getWidth() ?0:(longer-factor)/2;
    int y = source.getHeight() <= source.getWidth() ?0:(longer-factor)/2;
    source = Bitmap.createBitmap(source, x, y, factor, factor);
    source = Bitmap.createScaledBitmap(source, scale, scale, false);
    return source;
}

4
Fornisce una FileUriExposedExceptionversione SDK moderna.
Souradeep Nanda,

8

Ho riscontrato questo problema, intentnon è nullo ma le informazioni inviate tramite questo intentnon vengono ricevuteonActionActivit()

inserisci qui la descrizione dell'immagine

Questa è una soluzione migliore usando getContentResolver () :

    private Uri imageUri;
    private ImageView myImageView;
    private Bitmap thumbnail;

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

      ...
      ...    
      ...
      myImageview = (ImageView) findViewById(R.id.pic); 

      values = new ContentValues();
      values.put(MediaStore.Images.Media.TITLE, "MyPicture");
      values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on " + System.currentTimeMillis());
      imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
      startActivityForResult(intent, PICTURE_RESULT);

  }

l' onActivityResult()ottenere un bitmap memorizzato da getContentResolver () :

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_TAKE_PHOTO && resultCode == RESULT_OK) {

            Bitmap bitmap;
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
                myImageView.setImageBitmap(bitmap);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

presenta la descrizione dell'imagen aquí presenta la descrizione dell'imagen aquí

Controlla il mio esempio in github:

https://github.com/Jorgesys/TakePicture


6

App fotocamera funzionante semplice che evita il problema di intenti nulli

- tutto il codice modificato incluso in questa risposta; vicino al tutorial Android

Ho trascorso molto tempo su questo problema, quindi ho deciso di creare un account e condividere i miei risultati con te.

Il tutorial Android ufficiale "Scattare foto semplicemente" si è rivelato non del tutto promesso. Il codice fornito non funzionava sul mio dispositivo: un Samsung Galaxy S4 Mini GT-I9195 con Android versione 4.4.2 / KitKat / API Level 19.

Ho capito che il problema principale era la seguente riga nel metodo invocato durante l'acquisizione della foto ( dispatchTakePictureIntentnel tutorial):

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);

Ne è risultata l'intenzione successivamente catturata onActivityResultdall'essere nulla.

Per risolvere questo problema, ho tratto molta ispirazione dalle risposte precedenti qui e da alcuni post utili su github (principalmente questo di deepwinter - un grande ringraziamento a lui; potresti voler controllare la sua risposta anche su un post strettamente correlato ).

Seguendo questi piacevoli consigli, ho scelto la strategia di eliminare la putExtralinea menzionata e fare la cosa corrispondente per recuperare la foto scattata dalla fotocamera con il metodo onActivityResult (). Le linee decisive di codice per recuperare la bitmap associata all'immagine sono:

        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }

Ho creato un'app esemplare che ha solo la possibilità di scattare una foto, salvarla sulla scheda SD e visualizzarla. Penso che questo potrebbe essere utile per le persone nella mia stessa situazione quando mi sono imbattuto in questo problema, poiché gli attuali suggerimenti di aiuto si riferiscono principalmente a post di github piuttosto estesi che fanno la cosa in questione ma non sono troppo facili da supervisionare per i neofiti come me. Per quanto riguarda il file system creato da Android Studio per impostazione predefinita durante la creazione di un nuovo progetto, ho dovuto modificare tre file per il mio scopo:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.simpleworkingcameraapp.MainActivity">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="takePicAndDisplayIt"
    android:text="Take a pic and display it." />

<ImageView
    android:id="@+id/image1"
    android:layout_width="match_parent"
    android:layout_height="200dp" />

</LinearLayout>

MainActivity.java:

package com.example.android.simpleworkingcameraapp;

import android.content.Intent;
import android.graphics.Bitmap;
import android.media.Image;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

private ImageView image;
static final int REQUEST_TAKE_PHOTO = 1;
String mCurrentPhotoPath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    image = (ImageView) findViewById(R.id.image1);
}

// copied from the android development pages; just added a Toast to show the storage location
private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    Toast.makeText(this, mCurrentPhotoPath, Toast.LENGTH_LONG).show();
    return image;
}

public void takePicAndDisplayIt(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        File file = null;
        try {
            file = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
        }

        startActivityForResult(intent, REQUEST_TAKE_PHOTO);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultcode, Intent intent) {
    if (requestCode == REQUEST_TAKE_PHOTO && resultcode == RESULT_OK) {
        Uri uri = intent.getData();
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
        } catch (IOException e) {
            e.printStackTrace();
        }
        image.setImageBitmap(bitmap);
    }
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.simpleworkingcameraapp">


<!--only added paragraph-->
<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <!-- only crucial line to add; for me it still worked without the other lines in this paragraph -->
<uses-permission android:name="android.permission.CAMERA" />


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

Nota che la soluzione che ho trovato per il problema ha anche portato a una semplificazione del file manifest di Android: le modifiche suggerite dal tutorial Android in termini di aggiunta di un provider non sono più necessarie poiché non ne sto usando alcuna nel mio codice Java. Quindi, solo poche righe standard, principalmente relative alle autorizzazioni, dovevano essere aggiunte al file manifest.

Potrebbe inoltre essere utile sottolineare che l'importazione automatica di Android Studio potrebbe non essere in grado di gestirla java.text.SimpleDateFormate java.util.Date. Ho dovuto importarli entrambi manualmente.


questa soluzione richiede il permesso di STORAGE, che non è un ottimo approccio.
Shanraisshan,

4
La domanda afferma chiaramente che il parametro Intent denominato "data" passato a onActivityResult () è nullo, mentre la soluzione procede e tenta di utilizzarlo.
Fa

2

Probabilmente perché hai avuto qualcosa del genere?

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                        
Uri fileUri =  CommonUtilities.getTBCameraOutputMediaFileUri();                  
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);                        
startActivityForResult(takePictureIntent, 2);

Tuttavia, non è necessario inserire l'output aggiuntivo nell'intento, in quanto i dati vanno nell'URI anziché nella variabile di dati. Per questo motivo, devi prendere le due linee nel mezzo, in modo da avere

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent, 2);

Questo è ciò che ha causato il problema per me, spero che abbia aiutato.


12
Questa risposta è fuorviante. Otterrai una miniatura anziché una foto a dimensione intera senza inserire MediaStore.EXTRA_OUTPUT. È evidenziato nei documenti e in altre risposte.
user2417480,

2
Assolutamente questa risposta è fuorviante.
IndexOutOfDevelopersException

questa è una risposta fuorviante.
Abdulla Thanseeh,

0

Il seguente codice funziona per me:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 2);

E questo è il risultato:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{ 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    if(resultCode == RESULT_OK)
    {
        Uri selectedImage = imageReturnedIntent.getData();
        ImageView photo = (ImageView) findViewById(R.id.add_contact_label_photo);
        Bitmap mBitmap = null;
        try
        {
            mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

L'ho provato ma è lo stesso problema :(
soft_developer

1
sto ottenendo un imageReturnedIntent.getData()valore nullo. Sto creando l'intento come il tuo. Non ha aggiunto parametri aggiuntivi.
Jaydip Kalkani,


0

Codice Kotlin che funziona per me:

 private fun takePhotoFromCamera() {
          val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
        startActivityForResult(intent, PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA)
      }

E ottieni il risultato:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
 if (requestCode == PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA) {
         if (resultCode == Activity.RESULT_OK) {
           val photo: Bitmap? =  MediaStore.Images.Media.getBitmap(this.contentResolver, Uri.parse( data!!.dataString)   )
            // Do something here : set image to an ImageView or save it ..   
              imgV_pic.imageBitmap = photo 
        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.i(TAG, "Camera  , RESULT_CANCELED ")
        }

    }

}

e non dimenticare di dichiarare il codice di richiesta:

companion object {
 const val PERMISSIONS_REQUEST_TAKE_PICTURE_CAMERA = 300
  }

0

Dopo molti tentativi e studi, sono stato in grado di capirlo. Innanzitutto, i dati variabili da Intent saranno sempre nulli, quindi, il controllo per arresterà in !nullmodo anomalo l'app così a lungo che si sta passando un URI per startActivityForResult. Seguire l'esempio di seguito. Userò Kotlin.

  1. Apri l'intento della fotocamera

    fun addBathroomPhoto(){
    addbathroomphoto.setOnClickListener{
    
        request_capture_image=2
    
        var takePictureIntent:Intent?
        takePictureIntent =Intent(MediaStore.ACTION_IMAGE_CAPTURE)
        if(takePictureIntent.resolveActivity(activity?.getPackageManager()) != null){
    
            val photoFile: File? = try {
                createImageFile()
            } catch (ex: IOException) {
                // Error occurred while creating the File
    
                null
            }
    
            if (photoFile != null) {
                val photoURI: Uri = FileProvider.getUriForFile(
                    activity!!,
                    "ogavenue.ng.hotelroomkeeping.fileprovider",photoFile)
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    photoURI);
                startActivityForResult(takePictureIntent,
                    request_capture_image);
            }
    
    
        }
    
    }

    } `

  2. Crea createImageFile (). Ma DEVI rendere globale la variabile imageFilePath. L'esempio su come crearlo è sulla documentazione ufficiale di Android ed è piuttosto semplice

  3. Ottieni intento

     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    
    if (requestCode == 1 && resultCode == RESULT_OK) {
        add_room_photo_txt.text=""
        var myBitmap=BitmapFactory.decodeFile(imageFilePath)
        addroomphoto.setImageBitmap(myBitmap)
        var file=File(imageFilePath)
        var fis=FileInputStream(file)
        var bm = BitmapFactory.decodeStream(fis);
        roomphoto=getBytesFromBitmap(bm) }}
  4. Il metodo getBytesFromBitmap

      fun getBytesFromBitmap(bitmap:Bitmap):ByteArray{
    
      var stream=ByteArrayOutputStream()
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
      return stream.toByteArray();
      }

Spero che aiuti.


0

Quando cattureremo l'immagine dalla fotocamera in Android, allora Uri o diventerà data.getdata()nullo. abbiamo due soluzioni per risolvere questo problema.

  1. Possiamo ottenere il percorso Uri dall'immagine Bitmap
  2. Possiamo ottenere il percorso Uri dal cursore.

Implementerò tutti i metodi qui, si prega di guardare attentamente e leggere questi: -

Prima dirò come ottenere Uri dall'immagine Bitmap: il codice completo è:

Innanzitutto cattureremo l'immagine attraverso Intent che sarà lo stesso per entrambi i metodi, quindi questo codice scriverò una volta solo qui:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener(){
    @Override public void onClick(View view){
        Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if(intent.resolveActivity(getPackageManager())!=null){
            startActivityForResult(intent,reqcode);
        }

    }
});  

Ora implementeremo OnActivityResult :-( Questo sarà lo stesso per entrambi i metodi sopra 2): -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == reqcode && resultCode == RESULT_OK)
    {

        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        //Show Uri path based on Image
        Toast.makeText(LiveImage.this, "Here " + tempUri, Toast.LENGTH_LONG).show();

        //Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : " + getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}     

Ora creeremo il metodo sopra descritto per creare Uri da metodi Image e Cursor tramite le classi:

Ora percorso URI dall'immagine Bitmap

private Uri getImageUri(Context applicationContext, Bitmap photo)
{
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

\ Uri dal percorso reale dell'immagine salvata

public String getRealPathFromURI(Uri uri)
{
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

-1

Quando catturiamo l'immagine dalla fotocamera in Android, allora Urio data.getdata()diventa nullo. Abbiamo due soluzioni per risolvere questo problema.

  1. Recupera il percorso Uri dall'immagine Bitmap
  2. Recupera il percorso Uri dal cursore.

Ecco come recuperare l'Uri dall'immagine Bitmap. Prima acquisisci l'immagine tramite Intent che sarà la stessa per entrambi i metodi:

// Capture Image
captureImg.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(intent, reqcode);
        }
    }
});

Ora implementa OnActivityResult, che sarà lo stesso per entrambi i metodi:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==reqcode && resultCode==RESULT_OK)
    {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        ImageView.setImageBitmap(photo);

        // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
        Uri tempUri = getImageUri(getApplicationContext(), photo);

        // Show Uri path based on Image
        Toast.makeText(LiveImage.this,"Here "+ tempUri, Toast.LENGTH_LONG).show();

        // Show Uri path based on Cursor Content Resolver
        Toast.makeText(this, "Real path for URI : "+getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
    }
}

Ora crea tutti i metodi sopra per creare i metodi Uri da Image e Cursor:

Percorso Uri dall'immagine Bitmap:

private Uri getImageUri(Context applicationContext, Bitmap photo) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
    return Uri.parse(path);
}

Uri dal percorso reale dell'immagine salvata:

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

Qualcuno è stato in grado di risolverlo? Gentilmente pubblica la tua soluzione. Ovviamente il documento Android non è stato in grado di risolvere questo problema
Gstuntz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.