0

J'ai une photo dans mon application dans le dossier brut. Je souhaite donner aux utilisateurs la possibilité de définir cette image en tant que fond d'écran ou image de profil. Une boîte de dialogue devrait apparaître lorsque l'option est sélectionnée. Comme ceci: enter image description hereComment afficher la boîte de dialogue pour définir l'image comme fond d'écran ou photo de profil dans Android?

J'ai essayé montrant cette boîte de dialogue avec le code suivant

int resId = R.raw.a_day_without_thinking_mobile; 

     Resources resources = this.getResources(); 
     Uri sendUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + resources.getResourcePackageName(resId) + '/' + resources.getResourceTypeName(resId) + '/' + resources.getResourceEntryName(resId)); 

     Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
     intent.setDataAndType(sendUri, "image/jpg"); 
     intent.putExtra("mimeType", "image/jpg"); 
     intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

     startActivity(Intent.createChooser(intent, "Set As")); 

Mais cela m'a montré une boîte de dialogue comme ceci:

enter image description here

Je ne veux pas définir image directement comme fond d'écran à la place d'une boîte de dialogue devrait être montré à partir de laquelle l'utilisateur peut choisir s'il veut utiliser l'image comme fond d'écran ou image de profil.

Répondre

1

D'abord, vous devez télécharger le fichier d'image à partir du dossier brut à la carte SD, puis utiliser le fichier de carte SD pour définir l'image papier peint

int resId = R.raw.a_day_without_thinking_mobile; 

String filename = getResources().getResourceEntryName(resId); 

       String destfolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/Motivational Quotes"; 
       createDirIfNotExists(destfolder); 

       String destinationPath = destfolder +"/"+ filename + ".jpg"; 
       File destination = new File(destinationPath); 

       InputStream ins = getResources().openRawResource(
         getResources().getIdentifier(filename, 
           "raw", getPackageName())); 





       try { 
        copy2(ins,destination); 
        //Toast.makeText(this, "Image Downloaded", Toast.LENGTH_SHORT).show(); 

        File externalFile=new File(destinationPath); 
        Uri sendUri2 = Uri.fromFile(externalFile); 
        Log.d("URI:", sendUri2.toString()); 

        Intent intent = new Intent(Intent.ACTION_ATTACH_DATA); 
        intent.setDataAndType(sendUri2, "image/jpg"); 
        intent.putExtra("mimeType", "image/jpg"); 
        startActivityForResult(Intent.createChooser(intent, "Set As"), 200); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

public void copy2(InputStream src, File dst) throws IOException { 
     InputStream in = src; 

     OutputStream out = new FileOutputStream(dst); 
     //InputStream in = new FileInputStream(src); 

     // Transfer bytes from in to out 
     byte[] buf = new byte[1024]; 
     int len; 
     while ((len = in.read(buf)) > 0) { 
      out.write(buf, 0, len); 
     } 
     in.close(); 
     out.close(); 
     addImageGallery(dst); 
    } 

    private void addImageGallery(File file) { 
     ContentValues values = new ContentValues(); 
     values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath()); 
     values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // setar isso 
     values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); 
     getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
    } 

    public static boolean createDirIfNotExists(String path) { 
     boolean ret = true; 

     File file = new File(path); 
     if (!file.exists()) { 
      if (!file.mkdirs()) { 
       Log.e("TravellerLog :: ", "Problem creating Image folder"); 
       ret = false; 
      } 
     } 
     return ret; 
    } 

Voici le code que vous pouvez utiliser

0

Retirez le mettre supplémentaire de votre intention et utiliser les éléments suivants pour les données et tapez

intent.setDataAndType(sendUri, "image/*"); 
+0

le changement a comme vous le dites, mais il ne semble pas fonctionner. Le problème est toujours le même. –