在比较新的Chrome浏览器中,长按图片的时候会有复制图片的选项,那么这个图片如何获取到呢。
尝试了一下似乎手机上没有应用支持粘贴图片。
我们来写一个小小demo来看看粘贴图片如何实现。
首先可以参考官方文档 https://developer.android.google.cn/guide/topics/text/copy-paste
可以从官方的文档内知道,剪贴板支持 Text,URI,Intent三种类型的对象。可以先给结论,Chrome浏览器复制的一个URI对象。
下面是一个简单的用来获取剪贴板图片的代码
1 2 3 4 5 6 7 8
| ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
Uri pasteUri = item.getUri();
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), pasteUri);
|
上面的代码并没有刻意写得很简短,其中一部分可以在官方的文档内找到。
最后我们拿到一个bitmap,这个时候可以拿这个bitmap去放在想要使用的地方。
通常到这里读者就可以去尝试了。
下面是一个完整的简单小示范:
Activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData; import android.content.ClipboardManager; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.ImageView;
public class MainActivity extends AppCompatActivity { private static final String TAG = "pasteimage";
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
public void clickbutton(View view) { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); Log.d(TAG,"get clipboard");
ContentResolver cr = getContentResolver(); Log.d(TAG,"cr");
ClipData clip = clipboard.getPrimaryClip(); Log.d(TAG,"getprimaryclip");
if (clip != null) {
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
if(item == null){ return ; }
String pasteData = (String) item.getText();
if(pasteData != null){ Log.d(TAG,pasteData); }else { Uri pasteUri = item.getUri(); if(pasteUri != null){ Log.d(TAG,pasteUri.toString()); String uriMimeType = cr.getType(pasteUri); Log.d(TAG,uriMimeType); if(uriMimeType!=null){ if(uriMimeType.contains("image")){ Log.d(TAG,"find a image in clipboard"); try{ Bitmap bitmap = MediaStore.Images.Media.getBitmap(cr, pasteUri); ImageView image = findViewById(R.id.imageview); image.setImageBitmap(bitmap); }catch (Exception e){ e.printStackTrace(); } } } } } }else { Log.d(TAG,"null"); } } }
|
布局文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PasteImage" android:onClick="clickbutton" tools:layout_editor_absoluteX="17dp" tools:layout_editor_absoluteY="15dp" />
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageview" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/button" /> </androidx.constraintlayout.widget.ConstraintLayout>
|
使用方法,在Chrome浏览器里面复制一张图片之后,打开用上面的代码编译的app,点击PASTEIMAGE
,就读取剪贴板的图片并显示,如下图