位图:在菜单项中设置壁纸并保存在SD卡上

时间:2014-03-07 02:46:38

标签: android bitmap

我差不多完成了我的应用程序,我正在处理菜单项, 问题是将位图设置为墙纸并将其保存在菜单项的SD卡上。

我尝试了一些事情,第一个是创建第二个意图 - 从以前的活动中获取相同数据 - 我失败了 -

第二次使用相同的意图-i ve failed -

这是我的代码。

谢谢

public class Fullpic  extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // menu
        getMenuInflater().inflate(R.layout.menu_pics, menu);

        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {

        switch (item.getItemId())
        {

        case R.id.menu_set:

          // setting as wallpaper
            return true;

        case R.id.menu_save:

           // save the image on sdcard

            return true;


        case R.id.menu_back:

            return true;


        default:
            return super.onOptionsItemSelected(item);
        }
    }

     //menu end


    // XML node keys
    static final String KEY_THUMB_URL = "source";
    static final String HEIGHT_MAX = "600";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_pic);

        // getting intent data
        Intent in = getIntent();

        // Get XML values from previous intent dude
        String bid = in.getStringExtra(KEY_THUMB_URL);
        int hoppa= Integer.parseInt(in.getStringExtra(HEIGHT_MAX));

        // Displaying all values on the screen
        ImageView balls = (ImageView) findViewById(R.id.bals_label);
        balls.getLayoutParams().height = hoppa-30;



        URL url = null;
        try {
            url = new URL(bid);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Bitmap bmp = null;
        try {
            bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        balls.setImageBitmap(bmp);

    }


    public Object fetch(String address) throws MalformedURLException,
    IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }  
    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "source");
            return d;
        } catch (MalformedURLException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

new Thread(new Runnable(){
        @Override
        public void run(){
           String root = Environment.getExternalStorageDirectory().toString();
                File myDir = new File(root + "/blabla");    
                myDir.mkdirs();

                String fname = "name_here.jpg";
                File file = new File (myDir, fname);
                if (file.exists ()) 
                     file.delete ();
                try {
                       FileOutputStream out = new FileOutputStream(file); //create stream to output the contents of the image
                       bmp.compress(Bitmap.CompressFormat.JPEG, 90, out); //compress and write bitmap data to output file stream
                       out.flush();
                       out.close(); //closes stream important to avoid memory leaks

                } catch (Exception e) {
                      //exception handling
                }
           }}).start();

这应该可以帮助您将位图文件写入设备的SD卡所需的位置,并在一个线程中完成以避免主UI线程的重击。欢呼声。