2013-09-13 5 views
2

Я разрабатываю приложение, в котором у меня есть галерея изображений, и когда я нажимаю на любое изображение, оно открывается в полном режиме. Но я хочу set As Wallpaper функциональности как андроид галереи по умолчанию:Функциональность Android 'set As Wallpaper'

enter image description here

Я знаю, что это может быть сделано с помощью пользовательского кода (настройка обоев и кадрирования изображения). Но я хочу передать этот образ в Android-обозреватель Android, чтобы андроид справился с заданием обрезки и установки обоев. Как я могу это сделать? Как передать это изображение в настройщик walpaper по умолчанию для Android?

+1

Вы пытались использовать класс [WallpaperManager] (http://developer.android.com/reference/android/app/WallpaperManager.html)? Вы можете прямое изображение для установки в качестве системных обоев – rachit

+0

На самом деле мне нужно обрезать это изображение перед установкой в ​​качестве обоев, также как и для Android по умолчанию. Можете ли вы привести мне пример кода? –

+0

@ Kaidul Islam Sazal http://android-er.blogspot.in/2011/03/set-wallpaper-using-wallpapermanager.html – Metalhead1247

ответ

3

Вы можете запустить урок Crop путем запуска операции для получения результата и получить его в результате, а затем использовать класс обоев для обоев. как этот

Uri imgUri=Uri.parse("android.resource://your.package.name/"+R.drawable.image); 
Intent intent = new Intent("com.android.camera.action.CROP"); 
intent.setDataAndType(imgUri, "image/*"); 
intent.putExtra("crop", "true"); 
intent.putExtra("aspectX", 1); 
intent.putExtra("aspectY", 1); 
intent.putExtra("outputX", 80); 
intent.putExtra("outputY", 80); 
intent.putExtra("return-data", true); 
startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO); 

и использовать менеджер обоев в вашей onResult функции

Также имейте в виду, что это зависит от устройства, что ли устройство поддерживать его или нет. Это действие Intent не является частью внутреннего API. Некоторые производители предоставляют свои собственные приложения для галереи, поэтому нет способа узнать, распознает ли устройство устройство Intent.

+0

Я знал этот код. Но у урожая андроида есть некоторая ошибка, что он не может вернуть никакого результата, когда размер изображения большой (aspectX и aspectY большой). Поэтому я хочу передать свое изображение в Android-обозреватель Android, чтобы андроид справился с задачей обрезки и настройки обоев. –

0

Это мой код, который загружает изображение с URL-адреса. Вы можете найти его полезным. Не забудьте добавить необходимые разрешения для хранения, обоев и Интернета.

   @Override 
public void onClick(View v) { 
    setWall(v); 
    } 
}); 

if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (shouldShowRequestPermissionRationale(
       Manifest.permission.READ_EXTERNAL_STORAGE)) { 
      // Explain to the user why we need to read the contacts 
     } 

     requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
       MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 

     // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an 
     // app-defined int constant that should be quite unique 

     return; 
    } 
} 




public void setWall(View view) { 

    new SetWallpaperTask().execute(); 
} 

public class SetWallpaperTask extends AsyncTask <String, Void, Bitmap> { 
    String image = getIntent().getStringExtra("image"); 
    ProgressDialog progressDialog; 
    @TargetApi(Build.VERSION_CODES.KITKAT) 
    @Override 
    protected Bitmap doInBackground(String... params) { 
     Bitmap result= null; 
     try { 
      result = Picasso.with(getApplicationContext()) 
        .load(image) 
        .get(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext()); 



     //new Intent(wallpaperManager.getCropAndSetWallpaperIntent(getImageUri(result,getApplicationContext()))); 


     return result; 
    } 



    @TargetApi(Build.VERSION_CODES.KITKAT) 
    @Override 
    protected void onPostExecute (Bitmap result) { 
     super.onPostExecute(result); 

     WallpaperManager wallpaperManager = WallpaperManager.getInstance(getBaseContext()); 
     { 
      startActivity(new Intent(wallpaperManager.getCropAndSetWallpaperIntent(getImageUri(result,getApplicationContext())))); 

      // wallpaperManager.setBitmap(result); 

      progressDialog.dismiss(); 
      // Toast.makeText(getApplicationContext(), "Set wallpaper successfully", Toast.LENGTH_SHORT).show(); 

    }} 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progressDialog = new ProgressDialog(Wallpaper_activity.this); 
     progressDialog.setMessage("Please wait..."); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 
} 
private Uri getImageUri(Bitmap inImage, Context inContext) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), 
      inImage, "Title", null); 
    return Uri.parse(path); 
}