Android - 从drawable文件中获取Img Uri

时间:2016-05-10 22:41:03

标签: android facebook

我是Java编程的新手,但我必须为Facebook Messenger Expression Apps实现以下共享,我现在的问题是我不知道如何从我的drawable中获取图像。怎么可能呢?

此代码在点击按钮时触发。图像在我的drawable上,名为img.png

public void CompartirWhatsApp(View view) {
        FacebookSdk.sdkInitialize(getApplicationContext());

        String mimeType = "image/png";
        String route = "drawable://" + R.drawable.img;;
        File file = new File(route);
        Uri contentUri = Uri.fromFile(file);
        // contentUri points to the content being shared to Messenger
        ShareToMessengerParams shareToMessengerParams =
                ShareToMessengerParams.newBuilder(contentUri, mimeType)
                        .build();

        // Sharing from an Activity
        MessengerUtils.shareToMessenger(
                this,
                SHARE_TO_MESSENGER_REQUEST_CODE,
                shareToMessengerParams);
    }

3 个答案:

答案 0 :(得分:0)

您需要更改UriR.drawable.img是资源ID。

示例:

Uri uri = Uri.parse("android.resource://your.package.here/drawable/img");

更改" your.package.here"使用您的应用程序的包名称。

修改

我没有FacebookSdk的经验。但是,Google快速搜索会显示与您的问题相关的代码段和问题。例如,this代码段调用的setMetaData。例如:

ShareToMessengerParams shareToMessengerParams = ShareToMessengerParams.newBuilder(uri,"image/jpeg").setMetaData("{ \"image\" : \"img\" }").build();

更多相关链接:

Facebook Messenger sending metadata (Android)

Get the URI of an image stored in drawable

答案 1 :(得分:0)

您可以按名称确定URI,如下所示:

Uri uri = Uri.parse("android.resource://<package name>/drawable/image_name");

...确保将您的包裹名称放在上面的行中。

您也可以使用资源名称而不是字符串名称。

答案 2 :(得分:0)

根据定义,您无法直接共享资源中的文件,因为它们属于您的私有应用文件。如果插入媒体数据库或复制到外部存储或外部缓存中的某个位置,则只能共享它们。对于大多数部件,您需要获得为其写入存储的权限。您可以保存到外部文件缓存目录,但这也需要在kitkat下面的api权限。 Sop基本上你可以从你的资源中检索位图对象,但是你需要使用可以通过共享应用程序访问的Uri来访问它。 你也可以尝试授予uri权限,提供你使用直接uri而不是基于文件的uri。因为如果它基于文件,则存在访问问题。