Webや他の場所でイメージを長押しすると、自分のデバイスのクリップボードにイメージをコピーすることができます。ここを参照してください:Androidイメージをクリップボード/クリップデータにコピー
今、私は私のアプリにこれを実装したいです。私がこれまで持っているもの:
コード
Bitmap bitmap = getBitmap();
File file = storeImage(bitmap, name);
//Share
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
Uri uri = Uri.fromFile(file);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
//Add Copy to Clipboard to choosers
Intent clipboard = new Intent(this, CopyToClipboardImageActivity.class);
clipboard.setData(uri);
Intent chooserIntent = Intent.createChooser(shareIntent, getString(R.string.shareScreenshot));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{clipboard});
startActivity(chooserIntent);
CopyToClipboardImageActivity
public class CopyToClipboardImageActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Uri uri = getIntent().getData();
if (uri != null) {
copyImageToClipboard(uri);
Toast.makeText(this, getString(R.string.hinweisInZwischenablageKopiert), Toast.LENGTH_SHORT).show();
}
// Finish right away. We don't want to actually display a UI.
finish();
}
private void copyImageToClipboard(Uri uri) {
ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ContentValues values = new ContentValues(2);
values.put(MediaStore.Images.Media.MIME_TYPE, "Image/jpg");
values.put(MediaStore.Images.Media.DATA, "file://"+uri.getPath());
ContentResolver theContent = getContentResolver();
Uri imageUri = theContent.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);
mClipboard.setPrimaryClip(theClip);
}
}
しかし、これはまだ動作しません。それだけでクリップボードにコピー奇妙なパスを(^^絵上記参照)またはIのいずれかが、次のNullPointerExceptionが取得:仮想メソッドを呼び出すために
試み「はjava.lang.String型android.net.Uri.getSchemeを()」 nullオブジェクト参照
この行のClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);