3 Mayıs 2018 Perşembe

Set as wallpaper programmatically in android

public class MainActivity extends AppCompatActivity
{
int hasPermissionSetAsWallpaper; // for set wallpaper permission.
    final private int REQUEST_CODE_ASK_PERMISSIONS_SETASWALLPAPER = 201;  // for external storage permission
@Override
    protected void onCreate(Bundle savedInstanceState) {
........
if (Build.VERSION.SDK_INT >= 23)
        {
            hasPermissionReadExtSt = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE);
            // READ_EXTERNAL_STORAGE izni var mı diye bak, yoksa gir.
            if (hasPermissionReadExtSt != PackageManager.PERMISSION_GRANTED)
            {
                // shouldShowRequestPermissionRationale() method'u kullanıcı never ask'ı seçm,ş mi diye bakar.
                if (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) {
                    // getErrorDialog() method'u kullanıcıdan tekrar izin vermesini ister.
                    getErrorDialog("You need to allow Read External Storage permission." +
                            "\nIf you disable this permission, You will not able to add attachment.", MainActivity.this, false).show();
                }
                else {
                    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS_EXTERNAL_STORAGE);
                }
            }

            hasPermissionSetAsWallpaper = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SET_WALLPAPER);
            // SET_WALLPAPER izni var mı diye bak, yoksa gir.
            if (hasPermissionSetAsWallpaper != PackageManager.PERMISSION_GRANTED)
            {
                // shouldShowRequestPermissionRationale() method'u kullanıcı never ask'ı seçmiş mi diye bakar.
                if (shouldShowRequestPermissionRationale(Manifest.permission.SET_WALLPAPER)) {
                    // getErrorDialog() method'u kullanıcıdan tekrar izin vermesini ister.
                    getErrorDialog("You need to allow permission to be able to set an image as wallpaper" +
                            "\nIf you disable this permission, You cannot your drawings as wallpaper", MainActivity.this,).show();
                }
                else {
                    requestPermissions(new String[]{Manifest.permission.SET_WALLPAPER}, REQUEST_CODE_ASK_PERMISSIONS_SETASWALLPAPER);
                }
            }
        }
...........
}
public AlertDialog.Builder getErrorDialog(String message, Context context, final boolean isFromsetwallpaper) {
        
            final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
            alertDialog.setTitle(getString(R.string.app_name)).setMessage(message);
            alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    dialog.dismiss();
                    if (Build.VERSION.SDK_INT >= 23) {
                        requestPermissions(new String[]{Manifest.permission.SET_WALLPAPER},
                                REQUEST_CODE_ASK_PERMISSIONS_SETASWALLPAPER);
                    }
                }
            });
            return alertDialog;
        
    }

   public void setAsWallpaper(Context mContext, String imageName, int version){
    WallpaperManager myWallpaperManager = WallpaperManager.getInstance(mContext);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !myWallpaperManager.isSetWallpaperAllowed()) // api>24 ise ve izin yoksa    {
        myDialog.dismiss();
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
        alertDialog.setTitle("HATA!").setMessage("Wallpaper degistirme iznini vermediginiz icin bu ozelligi kullanamiyorsunuz.");
        alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            @Override            public void onClick(DialogInterface dialog, int which)
            {
                //do nothing.            }
        });
        return;
    }

    try {
        DrawingView.drawSavedThings(mContext,imageName,version);
        File fileImage = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES).toString() + File.separator + "MandalaApp"   + File.separator + imageName + ".jpeg");
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        Bitmap bitmapAsWallpaper = BitmapFactory.decodeFile(fileImage.getAbsolutePath(),bmOptions);
        int[] arr = MainActivity.getDeviceDimens((AppCompatActivity) mContext);
        bitmapAsWallpaper = Bitmap.createScaledBitmap(bitmapAsWallpaper,arr[0],arr[1],true);

        myWallpaperManager.setBitmap(bitmapAsWallpaper);
        bitmapAsWallpaper.recycle();

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

}


also add permission to manifestx.ml for older android versions:
<uses-permission android:name="android.permission.SET_WALLPAPER"/>