gpt4 book ai didi

java - 使用 FileOutputStream outputStream 进入 Intent 选择器

转载 作者:行者123 更新时间:2023-12-02 04:40:54 25 4
gpt4 key购买 nike

当我单击“共享”按钮时 takeScreenshot(); 方法将被调用,并且在该方法中另一个方法 shareScreenshot(outputStream); 正在调用,并且选择器正在打开以共享图像.

但 WhatsApp 给出错误,即“发送失败。请稍后重试”。

代码:

第 1 步:

  @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
super.onBackPressed();
break;

case R.id.share:
takeScreenshot();
break;
}
return super.onOptionsItemSelected(item);
}

第 2 步:

private void takeScreenshot() {
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

try {
// image naming and path to include sd card appending name you choose for file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

// create bitmap screen capture
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

File imageFile = new File(mPath);

FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
shareScreenshot(outputStream);
} catch (Throwable e) {
// Several error may come out with file handling or DOM
e.printStackTrace();
}
}

第 3 步:

private void shareScreenshot(FileOutputStream outputStream) {
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");

startActivity(Intent.createChooser(share, "Share Image"));
}

因此,当用户单击我的 Activity 中的共享按钮时, Intent 选择器将打开,这是正确的。假设用户点击 WhatsApp,它应该分享该 Activity 的屏幕截图。

最佳答案

第 1 步:在 list 文件中添加写入权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

此外,像这样请求许可并处理该结果。

ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);

第 2 步:不是将 outputStream 发送到 shareScreenshot(); 方法,而是发送 imageFile

因此将这个 shareScreenshot(outputStream); 替换为 shareScreenshot(imageFile); 这个。

第 3 步:更改您的 shareScreenshot(File outputStream); 方法

 private void shareScreenshot(File outputStream) {

Uri imageUri = Uri.fromFile(outputStream);

Log.d("mTAG", "shareScreenshot: "+imageUri);

Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, imageUri);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
share.setType("image/jpeg");

startActivity(Intent.createChooser(share, "Share Image"));
}

完成。

关于java - 使用 FileOutputStream outputStream 进入 Intent 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com