2

apk からクリップボードに画像ファイルをコピーしようとしています。

これが私がどのようにアプローチしているかです(大まかに言えば、問題の範囲外のコンテンツプロバイダーをローカルで使用しています.

        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, filename.getAbsolutePath());
        ContentResolver theContent = getContentResolver();
        Uri imageUri = theContent.insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
        ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);
        mClipboard.setPrimaryClip(theClip);

このコードでは、次の 2 つのことが起こります。

1) java.lang.IllegalStateException: Unable to create new file 2) 貼り付けの際、画像ではなく URI 自体のみを貼り付けます (対応アプリでも)

Androidで画像の貼り付けが機能している例は見当たりません。Googleとスタックオーバーフローの両方で、広範囲に回答を探しました。

誰でもこれを手伝ってもらえますか?ここで誰かの助けをいただければ幸いです。

PS: それが不可能な場合は、時間を節約するために、それも知りたいです。

ありがとう!

4

3 に答える 3

0

そのような機能が Android でサポートされているという兆候はありません。

動作は正しく、uri はビットマップではなくコピーされたデータです。

貼り付ける場所がこの uri を処理できるかどうかによって異なります。

于 2013-10-30T13:26:48.030 に答える
-1

不可能なため、クリップボードにコピーできません。ただし、それをSDカードにコピーして、必要なすべての場所からアクセスすることでそれを行うことができます。

ここに私を大いに助け、あなたも助けることができるいくつかのコードがあります:

Context Context = getApplicationContext();
String DestinationFile = "the place that you want copy image there like sdcard/...";
if (!new File(DestinationFile).exists()) {
  try {
    CopyFromAssetsToStorage(Context, "the pictures name in assets folder of your project", DestinationFile);
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}

private void CopyFromAssetsToStorage(Context Context, String SourceFile, String DestinationFile) throws IOException {
  InputStream IS = Context.getAssets().open(SourceFile);
  OutputStream OS = new FileOutputStream(DestinationFile);
  CopyStream(IS, OS);
  OS.flush();
  OS.close();
  IS.close();
}
private void CopyStream(InputStream Input, OutputStream Output) throws IOException {
  byte[] buffer = new byte[5120];
  int length = Input.read(buffer);
  while (length > 0) {
    Output.write(buffer, 0, length);
    length = Input.read(buffer);
  }
}
于 2013-10-30T13:40:27.087 に答える