Share via facebook/twitter application in android

2019-04-15 02:58发布

As the title implies , I would like to share something via facebook/twitter in android .If the facebook/twitter is installed , I want to share the post via the fb/twitter application , otherwise I want to direct to the user to the browser . I can direct the user to the browser it is easy , but how can I share post via the fb/twitter application ?

Thanks..

(Editted) I've tried to do this , examined developers.facebook.com , however they're doing this operation via fragments. I want to do it with default activity . I've tried the code below however I'm getting error like

W/dalvikvm(16093): VFY: unable to find class referenced in signature     (Landroid/support/v4/app/Fragment;)
W/dalvikvm(16093): VFY: unable to find class referenced in signature (Landroid/support/v4/app/Fragment;)
W/dalvikvm(16093): VFY: unable to resolve static method 367: Landroid/support/v4/content/LocalBroadcastManager;.getInstance (Landroid/content/Context;)Landroid/support/v4/content/LocalBroadcastManager;

The code I used in the default activity is :

private void publishStory() {
        Session currentSession = Session.getActiveSession();


        if (currentSession != null){


            Bundle postParams = new Bundle();
            postParams.putString("name", Commons.campaignname);
            postParams.putString("display", "touch");
            postParams.putString("link",  Commons.campaignlink");
            postParams.putString("picture",Commons.campaignimage);

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                                               .getGraphObject()
                                               .getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (JSONException e) {
                        Log.i("TAG",
                            "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(getApplicationContext(),
                             error.getErrorMessage(),
                             Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(getApplicationContext(), 
                                 postId,
                                 Toast.LENGTH_LONG).show();
                    }
                }
            };

            Request request = new Request(currentSession, "me/feed", postParams, 
                                  HttpMethod.POST, callback);

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();
        }

    }

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
        for (String string : subset) {
            if (!superset.contains(string)) {
                return false;
            }
        }
        return true;

}

2条回答
2楼-- · 2019-04-15 03:10

To post something using Facebook than integrate Facebook android sdk

Getting Started with the Facebook SDK for Android

Use Feed Dialog to post on Facebook. It automatically open fb app if it is installed otherwise open in browser

Post to wall

public class PhotoViewer extends Activity implements StatusCallback{

    Button btnShare;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo_viewer);

        btnShare = (Button) findViewById(R.id.btnShare);

        btnShare.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Session.openActiveSession(PhotoViewer.this, true, PhotoViewer.this);

            }
        });

    }

    @Override
    public void call(Session session, SessionState state, Exception exception) {

        if (session.isOpened()) {
            publishFeedDialog();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }

    private void publishFeedDialog() {

    Bundle params = new Bundle();
    params.putString("name", "Facebook SDK for Android");
    params.putString("caption", "Build great social apps and get more installs.");
    params.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
    params.putString("link", "https://developers.facebook.com/android");
    params.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");


        WebDialog feedDialog = (
                new WebDialog.FeedDialogBuilder(PhotoViewer.this,
                        Session.getActiveSession(),
                        params))
                        .setOnCompleteListener(new OnCompleteListener() {

                            @Override
                            public void onComplete(Bundle values,FacebookException error) {

                                if (error == null) {
                                    // When the story is posted, echo the success
                                    // and the post Id.
                                    final String postId = values.getString("post_id");
                                    if (postId != null) {
                                        //Toast.makeText(PhotoViewer.this,"Posted story, id: "+postId,Toast.LENGTH_SHORT).show();
                                        Toast.makeText(getApplicationContext(), "Publish Successfully!", Toast.LENGTH_SHORT).show();
                                    } else {
                                        // User clicked the Cancel button
                                        Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show();
                                    }
                                } else if (error instanceof FacebookOperationCanceledException) {
                                    // User clicked the "x" button
                                    Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show();
                                } else {
                                    // Generic, ex: network error
                                    Toast.makeText(getApplicationContext(),"Error posting story",Toast.LENGTH_SHORT).show();
                                }
                            }

                        })
                        .build();
        feedDialog.show();
    }

}

If you are not using a Fragment than use you Context like ClassName.this instead of getActivity()

EDIT

please add this code in onCreate() to print Hash key

// Add code to print out the key hash
PackageInfo info = getPackageManager().getPackageInfo("com.your.package", // replace with your package name 
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());

        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));

    }
查看更多
唯我独甜
3楼-- · 2019-04-15 03:33

by this code you can check if facebook or twitter application is installed on the device. rest you can put your logic if condition is false

final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm
            .getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package : " + packageInfo.packageName);
}

Then you can check if packageInfo.packageName is equal to some string which contains the package name of that application.

查看更多
登录 后发表回答