zon*_*abi 14 android facebook facebook-sharer android-intent
只想分享动态文本字符串+应用程序的URL.原生的Android共享意图设置正确,并且与Twitter,Gmail等完美配合.但是,正如许多人猜测的那样,它不适用于Facebook.显然因为Facebook不接受该intent.EXTRA_TEXT领域的文字,只有一个网址.
好吧,我对你们的问题是:有没有办法根据他们选择分享的方法来分支共享意图?例如,如果他们通过Gmail或Twitter共享,请使用现有的String + URL(所需选项)EXTRA_TEXT,但如果他们选择通过Facebook共享,则只使用URL作为EXTRA_TEXT.
并不是真的想要实现Facebook Android SDK来完成Android内置的简单任务.
感谢您的时间和建议.
试过这样的事情,但它显然失败了,因为它只检查共享选项是否存在(当共享弹出时,而不是在他们点击共享方法之后),它在选择方法时没有响应.
String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com";
PackageManager pm = view.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
for(final ResolveInfo app : activityList) {
Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name);
//if((app.activityInfo.name).contains("facebook")) {
if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) {
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com");
startActivity(Intent.createChooser(sharingIntent, "Share idea"));
break;
} else {
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share"));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
zon*_*abi 20
找到了解决方案,在这个问题上寻求其他问题:https://stackoverflow.com/a/8550043/1938669
我在这里发布的原始问题很接近.在可能的shareIntent List的周期内,您需要创建针对特定共享选择的新共享意图(如facebook或twitter)
这是一个最终工作解决方案,如果选择了facebook,则只共享一个URL,否则共享完整的文本字符串+ url:
public void shareIt(View view){
//sharing implementation
List<Intent> targetedShareIntents = new ArrayList<Intent>();
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
String shareBody = "string of text " + txt_var + " more text! Get the app at http://someapp.com";
PackageManager pm = view.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
for(final ResolveInfo app : activityList) {
String packageName = app.activityInfo.packageName;
Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
targetedShareIntent.setType("text/plain");
targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "share");
if(TextUtils.equals(packageName, "com.facebook.katana")){
targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://someurl.com");
} else {
targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
}
targetedShareIntent.setPackage(packageName);
targetedShareIntents.add(targetedShareIntent);
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share Idea");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6145 次 |
| 最近记录: |