0

ファイルパスから壁紙を設定しようとしています。ただし、10 秒以上かかるため、アプリがフリーズします。

私が使用しているコードは次のとおりです。

public void SET_WALLPAPER_FROM_FILE_PATH (String file_path)
{
    Bitmap image_bitmap;
    File   image_file;
    FileInputStream fis;

    try {
        WallpaperManager wallpaper_manager = WallpaperManager.getInstance(m_context);
        image_file                         = new File(file_path);
        fis                                = new FileInputStream(image_file);
        image_bitmap                       = BitmapFactory.decodeStream(fis);

        wallpaper_manager.setBitmap(image_bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

私は使用しようとしました:

wallpaper_manager.setStream(fis)

それ以外の:

wallpaper_manager.setBitmap(image_bitmap);

この回答で示唆されているように、壁紙を読み込めませんでした。

誰でも私を案内できますか?

ありがとう

4

1 に答える 1

1

AsyncTask を使用してみて、doInBackground メソッドで次のように記述します。

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){
    try {
        //Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f),null,o);

        //The new size we want to scale to
        final int REQUIRED_WIDTH=WIDTH;
        final int REQUIRED_HIGHT=HIGHT;
        //Find the correct scale value. It should be the power of 2.
        int scale=1;
        while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT)
            scale*=2;

        //Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    }
        catch (FileNotFoundException e) {}
    return null;
} 
于 2016-05-30T07:58:58.627 に答える