重启智能手机后放大我创建的壁纸



壁纸有问题。当我创建这个并重置我的手机时,壁纸突然出现了。我如何改变BootReceiver类加载壁纸和屏幕的正确位置?

MainActivity:

public class MainActivity extends ActionBarActivity implements View.OnClickListener {
    public static int toPhone;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView image1 = (ImageView) findViewById(R.id.IVimage1);
        ImageView image2 = (ImageView) findViewById(R.id.IVimage2);
        ImageView image3 = (ImageView) findViewById(R.id.IVimage3);
        Context context;
        image1.setOnClickListener(this);
        image2.setOnClickListener(this);
        image3.setOnClickListener(this);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    public void onClick(View view) {
        Intent intent = new Intent(this, Podglad.class);
        switch (view.getId()) {
            case R.id.IVimage1:
                toPhone = R.drawable.kwiaty;
                startActivity(intent);
                break;
            case R.id.IVimage2:
                toPhone = R.drawable.listek;
                startActivity(intent);
                break;
            case R.id.IVimage3:
                toPhone = R.drawable.kwiaty;
                startActivity(intent);
                break;
        }
    }
}

Podglad:

public class Podglad extends ActionBarActivity {
    final Context context = getApplicationContext();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_podglad);
        final Intent intent = new Intent();
        View myView =  this.findViewById(R.id.a);
        myView.setBackgroundResource(MainActivity.toPhone);
        Button b=(Button)findViewById(R.id.button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences sharedPreferences = getSharedPreferences("wallpaperapp", 0);
                sharedPreferences.edit().putInt("position", 0).commit();
                DisplayMetrics metrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(metrics);
                int height = metrics.heightPixels;
                int width = metrics.widthPixels;
                Bitmap tempbitMap = BitmapFactory.decodeResource(getResources(), MainActivity.toPhone);
                Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap, width, height, true);
                WallpaperManager wallpaperManager = WallpaperManager.getInstance(Podglad.this);
                wallpaperManager.setWallpaperOffsetSteps(1, 1);
                wallpaperManager.suggestDesiredDimensions(width, height);
                try {
                    wallpaperManager.setBitmap(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.podglad, menu);
        return true;
    }
}

BootReceiver:

public class BootReceiver extends BroadcastReceiver {
    private static final String TAG="BootReceiver";
    @Override public void onReceive(Context context,Intent intent){
        try{
            SharedPreferences sharedPreferences = context.getSharedPreferences("wallpaperapp",0);
            int position= sharedPreferences.getInt("position", 0);
            DisplayMetrics metrics = new DisplayMetrics();
            WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            windowManager.getDefaultDisplay().getMetrics(metrics);
            int height = metrics.heightPixels;
            int width = metrics.widthPixels;
            Bitmap tempbitMap = BitmapFactory.decodeResource(context.getResources(),MainActivity.toPhone);
            Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true);
            WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
            wallpaperManager.setWallpaperOffsetSteps(1, 1);
            wallpaperManager.suggestDesiredDimensions(width, height);
            try {
                wallpaperManager.setBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch(Exception e) {
            Log.e(TAG,e.toString());
        }
    }
}

你可以注册一个BroadcastReceiver为"android.intent.action.BOOT_COMPLETED",并重新做你所做的一切,让它在第一个地方工作。

或者你可以调整和裁剪图像以适合所需的尺寸,这样当设备重新启动时,它会加载一个已经完美尺寸的图像。

也许还有其他的解决方案,但我首先想到的是这两个。


编辑,下面是我在评论中关于使用一种方法的意思的一个例子:

public class WallpaperUtil {
    public static setWallpaper(Context context) {
        try {
            SharedPreferences sharedPreferences = context
                                .getSharedPreferences("wallpaperapp",0);
            ...
        WindowManager windowManager = (WindowManager) context
                                .getSystemService(Context.WINDOW_SERVICE);
            ...
        } catch(Exception e) {
            Log.e(TAG,e.toString());
        }
    }
}

public class BootReceiver extends BroadcastReceiver {
    @Override public void onReceive(Context context,Intent intent) {
        WallpaperUtil.setWallpaper(getApplicationContext);
    }
}

public class SetWallpaperActivity extends Activity
                                  implements View.OnClickListener {
    ...
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.buttonSetWallpaper:
                // save choice to SharedPreferences then
                WallpaperUtil.setWallpaper(this);
                break;
            default:
                break;
        }
    }
}

最新更新