0

i am new to android development. I am use the following code to set the wallpaper to every home screen. In this code first it ll ask the user to enter the home screen availability numbers.

The user giving the input that they are having 3 home screen means it will ask them to select three wallpapers from sdcard and i am get that three images and change it to device default screen size and combine that bitmap images and set it as a home screen wall paper.

  public void onCreate(Bundle savedInstanceState) {
         Display display = getWindowManager().getDefaultDisplay();
    dwidth = display.getWidth();
    dheight = display.getHeight();
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main1);          
    Log.i("WALLPAPER", "" + dwidth);
    Log.i("WALLPAPER", "" + dheight);
    width1 = dwidth;
    height1 = dheight;
    scno = (EditText) findViewById(R.id.screenno);
    image = (ImageView) findViewById(R.id.imageview1);
    wallpaper=(Button) findViewById(R.id.setwallpaper);
    selectimage = (Button) findViewById(R.id.selectimg);
    selectimage.setVisibility(View.VISIBLE);
    selectimage.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(scno.getText().toString().length()<=0){
        Toast.makeText(getApplicationContext(),"Enter The number Of Screen",Toast.LENGTH_LONG).show();
            }
            else{
            nmscreen = scno.getText().toString();               
            noofscreen = Integer.parseInt(nmscreen);            
            Log.i("WALLPAPERDEMO", "" + noofscreen);                
            Intent intent1=new Intent();
            intent1.setType("image/*");
            intent1.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent1, "Complete action using"), PICK_FROM_FILE);             
            }
        }
    });

    wallpaper.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(scno.getText().toString().length()<=0){
                Toast.makeText(getApplicationContext(),"Enter The Number Of Screen",Toast.LENGTH_LONG).show();
            }
            else{
            WallpaperManager mywallpapermanager=WallpaperManager.getInstance(getApplicationContext());

            try{
                mywallpapermanager.setBitmap(change);
                selectimage.setEnabled(true);

            }catch (IOException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            image.setImageBitmap(null);
            scno.setText("");
        }
        }

    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK)return;
    Log.d("WALLPAPERDEMO", "Count: " + count);
    switch (requestCode) {
        case PICK_FROM_FILE:
            mImageCaptureUri = data.getData();
            Log.i("WALLPAPERDEMO","Calling doCrop() "+mImageCaptureUri.toString());
            doCrop();
            break;
        case CROP_FROM_CAMERA:          
            Bundle extras = data.getExtras();
            if (extras != null) {               
                photo = extras.getParcelable("data");               
                Log.d("WALLPAPERDEMO",""+photo.getWidth());                 
                Log.d("WALLPAPERDEMO",""+photo.getWidth());
                bitmapArray.add(photo);
                 count++;
                 Log.d("WALLPAPERDEMO","Count"+count);
                 if(count<noofscreen){
                        Log.d("WALLPAPERDEMO","Outside Switch"+count);
                        Intent intent1=new Intent();
                        intent1.setType("image/*");
                    intent1.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(Intent.createChooser(intent1, "Complete action using"), PICK_FROM_FILE);
                 }else{
                     firstimage = new Bitmap[count];
                        for (i = 0; i <count; i++) {
                            firstimage[i] = bitmapArray.get(i);
                        }
                        setImage(firstimage);
                        selectimage.setEnabled(false);
                 }
                File f = new File(mImageCaptureUri.getPath());            
                if (f.exists()) f.delete();
                break;
        }           
    }               
}       

private void setImage(Bitmap[] firstimage) {

    change = Bitmap.createScaledBitmap(firstimage[0], width1, height1, true);
    for(int i=1;i<firstimage.length;i++){
            Log.d("WALLPAPERDEMO", "" + firstimage[i].getWidth());
            Log.d("WALLPAPERDEMO", "change " + change.getWidth());
            change1 = Bitmap.createScaledBitmap(firstimage[i], width1, height1, true);
            Log.d("WALLPAPERDEMO", "change1 " + change1.getWidth());
            change = combineImages(change, change1);
            Log.d("WALLPAPERDEMO", ""+change.getWidth());
    }

    image.setImageBitmap(change);

}

public Bitmap combineImages(Bitmap change1, Bitmap change) {
    Bitmap cs = null;
    int width, height = 0;

    if (change1.getWidth() > change.getWidth()) {
        width = change1.getWidth() + change.getWidth();
        height = change1.getHeight();
    } else {
        width = change.getWidth() + change1.getWidth();
        height = change.getHeight();
    }
    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    Canvas comboImage = new Canvas(cs);

    comboImage.drawBitmap(change, 0f, 0f, null);
    comboImage.drawBitmap(change1, change.getWidth(), 0f, null);
    return cs;

}

I am run this application and check it with the real device for some of the devices its working perfectly. But in some devices the screen size is not fitted. what is the problem in my code. I am getting the default screen size of the device and for combining images i am change the selected bitmap images into default screen size then only combine the image and set it as a wallpaper.

Please help me to set a wallpaper to every home screen. Thanks in advance.

Nathiya
  • 88
  • 1
  • 8

1 Answers1

0

xlarge screens are at least 960dp x 720dp large screens are at least 640dp x 480dp normal screens are at least 470dp x 320dp small screens are at least 426dp x 320dp

Save your resource in this folder.

Anand M Joseph
  • 787
  • 7
  • 7
  • I am getting the width and height of the current mobile and set that dimensions to wallpaper. The Current mobile device width and height i am getting by using following code.Display display = getWindowManager().getDefaultDisplay(); dwidth = display.getWidth(); dheight = display.getHeight(); – Nathiya Jul 03 '12 at 07:46
  • I am getting the width and height of the current mobile and set that dimensions to wallpaper. The Current mobile device width and height i am getting in the dwidth and dheight variables. see in my code. and also in setimage method i am changes the selected images dimension into dwidth and deheight by using createscaledbitmap. – Nathiya Jul 03 '12 at 08:49
  • could you plz share u r resizing code is it like this ? Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length) profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false)); – Anand M Joseph Jul 03 '12 at 09:07
  • Bitmap profileimage=Bitmap.createScaledBitmap(image, width1, height1, true); Here Width1 and height1 are the default home screen size of the device. – Nathiya Jul 03 '12 at 10:24
  • could you plz try with what i mention in previous post. – Anand M Joseph Jul 03 '12 at 11:11
  • hi i am working with a way like what u previously told. But i am getting the same problem like screen is not fitted for samsung one model device. I think in mine the problem is getting the home screen width of the device. In another samsung model device its working perfectly. The width is not fit perfectly it can be viewed in next screen also. – Nathiya Jul 04 '12 at 10:28
  • Could you plz give you screen resolution or your model number which fit the Screen and not. – Anand M Joseph Jul 04 '12 at 11:27
  • Samsung S5360 Galaxy Y ,240 x 320 pixels, 3.0 inches (~133 ppi pixel density) in this model its fit.Samsung GT I5500 , 240 x 320 pixels, 2.8 inches (~143 ppi pixel density) in this model its not fitted properly.I think in the density its make problem. – Nathiya Jul 06 '12 at 04:57