Android - 分享

时间:2012-03-14 12:26:44

标签: android facebook twitter share

是否可以列出Intent.ACTION_SEND? 我的意思是我需要知道是否有人通过action_send在Facebook或推特上分享。

2 个答案:

答案 0 :(得分:2)

不,您无法通过ACTION_SEND确定某个人是否在您链接到的应用程序中实际执行了任何操作。这与Web非常相似,您不知道某个人是否在通过URL链接到的网站上做任何事情。

答案 1 :(得分:2)

也许你想要一个更完整的答案,因为被接受的答案很短,我已经太晚了,但希望它仍然有用:)

所以这是处理多个意图的可能解决方案......

1)您想知道意图的结果(例如成功或失败)吗?

使用以下行启动意图:

startActivityForResult(intent, 1); //instead of startActivity(intent)

通过覆盖onActivityResult:

来检索requestCode和resultCode
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 0) {
        if(resultCode == Activity.RESULT_OK){
            //intent 0 = succesful (Facebook)
        } else{
            //intent 0 = failed or canceled
        }
    } else if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            //intent 1 = succesful (Twitter)
        } else{
            //intent 1 = failed or canceled
        }
    }
}

2)您想知道意图打开了哪个应用

不要相信内置的意图选择器,创建自己的对话框并为每个意图赋予另一个requestCode(一个唯一的整数值,以识别意图)

一个例子:

new AlertDialog.Builder(this)
.setTitle("Share with friends!")
.setSingleChoiceItems(new ArrayAdapter<String>(this, android.R.layout.select_dialog_item,
    new String[]{"Facebook", "Twitter"}), -1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if (which == 0) {
                    StartFacebookShare();
                } else if (which == 1) {
                    StartTwitterShare();
                }
                dialog.dismiss();
            }
}).show();

private void StartFacebookShare() {
    String messageUrl = "http://www.stackoverflow.com"; //the url you want to share
    try {
        Intent intent = new Intent("android.intent.category.SEND");
        intent.putExtra(Intent.EXTRA_TEXT, messageUrl);
        intent.setClassName("com.facebook.katana", "com.facebook.katana.ShareLinkActivity");
        startActivityForResult(intent, 0);
    } catch (Exception e) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("https://m.facebook.com/sharer.php?u=" + messageUrl));
        startActivityForResult(intent, 1);
    }
}
private void StartTwitterShare() {
    String messageUrl= "http://www.stackoverflow.com"; //the string you want to tweet
    try {
        //see edit below for more info on API
        Twitter twitter = TwitterFactory.getSingleton();
        Status status = twitter.updateStatus(messageUrl);
    } catch (Exception e) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + messageUrl));
        startActivityForResult(intent, 1);
    }
}

可以找到一些有用的信息herehere,如果您对我的代码有建议(我总是喜欢反馈^^),或者如果您是的话,可以搜索here或发表评论坚持某事:)

编辑:一些小的改动,比如意图,总是添加一个带有web意图的捕获(现在不能失败,对吧?) 对于Twitter部分,我使用了jar(将它放在你的'libs'文件夹中)和需要关注registration的Twitter API和 configuration,祝你好运!