我需要通过WhatsApp分享图像和一些文本,使用Android的意图.

Uri imageUri = Uri.parse(Filepath);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setPackage("com.whatsapp");
shareIntent.putExtra(Intent.EXTRA_TEXT, "My sample image text");
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(imageUrl));
shareIntent.setType("image/png");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

try {
    startActivity(shareIntent);
} catch (android.content.ActivityNotFoundException ex) {
    ToastHelper.MakeShortText("Kindly install whatsapp first");
}

我正在使用上面的代码,但它在共享时抛出了一个"不支持的文件格式"错误.

推荐答案

你可以这样试一试

  public static void shareOnWhatsapp(Context context, String str) {
    Uri parse = Uri.parse(str);
    Intent intent = new Intent();
    intent.setAction("android.intent.action.SEND");
    intent.setPackage("com.whatsapp");
    String stringBuilder = context.getResources().getString(R.string.play_more_app) +
            context.getPackageName();
    intent.putExtra("android.intent.extra.TEXT", stringBuilder);
    intent.putExtra("android.intent.extra.STREAM", parse);
    intent.setType("image/*");
    intent.addFlags(1);
    try {
        context.startActivity(intent);
    } catch (Exception unused) {
        setToast(context, context.getResources().getString(R.string.whatsapp_not_installed));
    }
}

我用这个功能分享了它工作的图像,我希望它也能为你工作.

Edit

  1. 添加此依赖项以将URL转换为位图

        implementation 'com.github.bumptech.glide:glide:4.14.2'
    
  2. 使用此函数获取要共享的图像URI

        private Uri getImageURI(Bitmap image) {
        File imagesFolder = new File(getCacheDir(), "images");
        Uri uri = null;
        try {
            imagesFolder.mkdirs();
            File file = new File(imagesFolder, "shared_image.png");
    
            FileOutputStream stream = new FileOutputStream(file);
            image.compress(Bitmap.CompressFormat.PNG, 90, stream);
            stream.flush();
            stream.close();
            uri = FileProvider.getUriForFile(this, getPackageName() + ".provider", file);
    
        } catch (IOException e) {
            Log.d("TAG", "IOException while trying to write file for sharing: " + e.getMessage());
        }
        return uri;
    }
    
  3. 使用此功能在WhatsApp上共享图像

        public static void shareOnWhatsapp(Context context, Uri uri) {
        Intent intent = new Intent();
        intent.setAction("android.intent.action.SEND");
        intent.setPackage("com.whatsapp");
        String stringBuilder = "Your String Or Message" +
                context.getPackageName();
        intent.putExtra("android.intent.extra.TEXT", stringBuilder);
        intent.putExtra("android.intent.extra.STREAM", uri);
        intent.setType("image/*");
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        try {
            context.startActivity(intent);
        } catch (Exception unused) {
            Toast.makeText(context, "whatsapp not installed", Toast.LENGTH_SHORT).show();
        }
    }
    
  4. 像这样使用

            findViewById(R.id.btnShare).setOnClickListener(v -> {
            Glide.with(this).asBitmap().load( /*Your URL*/ "https://drinkprime.in/images/smart_water_purifier.jpg").into(new CustomTarget<Bitmap>() {
                @Override
                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                    Bitmap bitmap = resource;
                    shareOnWhatsapp(MainActivity.this, getImageURI(bitmap));
                }
    
                @Override
                public void onLoadCleared(@Nullable Drawable placeholder) {
                }
            });
        });
    

它现在完全起作用了

Android相关问答推荐

当我的Log.i()不在主线程中时,如何在我的logcat中显示它?

Jetpack编写:通过viewModels()vs viewModel View ModernName()'

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

在Android Studio Iguana 2023.2.1中,哪里可以找到能量分析器?

NativeScript在`ns run android`上重复Kotlin类

如何在Android Jetpack Compose中找到我的手机屏幕一行有多少个单词

在以XML格式设置完整屏幕视图时可见App Compat按钮

在Jetpack Compose中的隐藏状态栏后面绘制

我正在创建一个简单的连接四个游戏,我需要一个弹出式窗口当你赢了

没有打开历史记录的活动意向 Select 器完成调用活动

appcompat 依赖从何而来?

使用 Kotlin 在 Android 中导航时如何防止 ViewModel 被杀死?

如何在 React Native 下载文件之前打开文件管理器并 Select 一个目录

ImageBitmap 使用 Glide/Coil 到画布

验证硬编码密码

Material Design 网站的新设计已启动,但我找不到实现选项卡,该选项卡在哪里?

更新后 Firebase 服务无法在模拟器上运行

Jetpack 组合和片段

如何使伴奏导航 BottomSheet 完全展开?

使用 Android 字符串数组在 Room 中迁移