2

画像ギャラリーがあるアプリケーションを開発しており、画像をクリックするとフルモードで開きます。しかし、set As WallpaperAndroidのデフォルトギャラリーのような機能が必要です:

ここに画像の説明を入力

カスタムコード(壁紙の設定と画像のトリミング)で実行できることはわかっています。しかし、その画像をAndroidのデフォルトの壁紙セッターに渡し、Androidが壁紙のトリミングと設定のタスクを管理できるようにしたいと考えています。どうやってやるの?その画像をAndroidのデフォルトのwalpaperセッターに渡すにはどうすればよいですか?

4

2 に答える 2

4

結果のアクティビティを開始して 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関数で壁紙マネージャーを使用します

また、そのデバイスがサポートしているかどうかは、デバイスによって異なります。このインテント アクションは、内部 API の一部ではありません。一部のメーカーは独自のギャラリー アプリを提供しているため、ユーザーのデバイスがインテントを認識するかどうかを知る方法はありません。

于 2013-09-13T05:12:18.183 に答える
1

これは、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);
}
于 2017-05-18T16:48:56.857 に答える