Długie naciśnięcie na obrazy w Internecie lub w innych miejscach daje mi możliwość skopiowania obrazu do schowka mojego urządzenia. Zobacz tutaj:Android Kopiuj obraz do schowka/clipdata
Teraz chcę wdrożyć to w mojej aplikacji. Co mam tak daleko:
Kod
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);
}
}
Ale to jeszcze nie działa. Albo kopiuje dziwną ścieżkę do schowka (patrz zdjęcie powyżej ^^) lub otrzymuję następujący wyjątek NullpointerException:
Próba wywołania metody wirtualnej "java.lang.String android.net.Uri.getScheme()" na null obiektu
w tej linii ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);