通过普通方式和Facebook SDK从SD卡分享图像到Facebook墙

时间:2014-04-30 07:48:59

标签: android facebook facebook-android-sdk

我想将图像分享到我的Facebook墙上,因为我正在从SD卡中获取图像然后分享, 我的代码:

String dirpath = android.os.Environment.getExternalStorageDirectory().toString();
String path = dirpath+"/test.png";
Uri imageUri = Uri.parse(path);

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
sharingIntent.setType("image/png");
startActivity(Intent.createChooser(sharingIntent , "Send image using.."));

但它不起作用,请给我一些解决方案。

此外,我想要使用Facebook SDK分享图像的代码..

2 个答案:

答案 0 :(得分:3)

protected void share(String nameApp, String imagePath, String text) {
        // TODO Auto-generated method stub

        try {
            List<Intent> targetedShareIntents = new ArrayList<Intent>();
            Intent share = new Intent(android.content.Intent.ACTION_SEND);
            share.setType("image/jpeg");
            List<ResolveInfo> resInfo = getPackageManager()
                    .queryIntentActivities(share, 0);
            if (!resInfo.isEmpty()) {
                for (ResolveInfo info : resInfo) {
                    Intent targetedShare = new Intent(
                            android.content.Intent.ACTION_SEND);
                    targetedShare.setType("image/jpeg"); // put here your mime
                    // type
                    if (info.activityInfo.packageName.toLowerCase().contains(
                            nameApp)
                            || info.activityInfo.name.toLowerCase().contains(
                                    nameApp)) {
                        targetedShare.putExtra(Intent.EXTRA_SUBJECT, text);
                        targetedShare.putExtra(Intent.EXTRA_TEXT, text);
                        targetedShare.putExtra(Intent.EXTRA_STREAM,
                                Uri.fromFile(new File(imagePath)));
                        targetedShare.setPackage(info.activityInfo.packageName);
                        targetedShareIntents.add(targetedShare);
                    }
                }
                Intent chooserIntent = Intent.createChooser(
                        targetedShareIntents.remove(0), "Select app to share");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                        targetedShareIntents.toArray(new Parcelable[] {}));
                startActivity(chooserIntent);
            }
        } catch (Exception e) {
        }

    }

答案 1 :(得分:1)

  

这是我的问题

你用过

Intent.FLAG_ACTIVITY_NEW_TASK

所以这意味着你没有活动

你的错误是:

  

android.util.AndroidRuntimeException:从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?

你应该成为全球类 那是什么?

创建类,例如它的名字是G.java

公共类G扩展Application { }

扩展应用

并在“ AndroidManifest.xml

中定义它
    <application
    android:name=".G"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

并创建:

public static Activity              currentActivity;

currentActivity ”是可变保存当前活动

在您的活动的onResume事件中写道:

    G.currentActivity = this;
    super.onResume();

注意:它必须放在之前         super.onresume();

所以在你的代码中使用:

                    G.currentActivity.startActivity(Intent.createChooser(sharingIntent, "Share via..."));


    G.currentActivity.

之前使用过:

    startActivity(Intent);