我正在编写一个android应用程序来上传和分享facebook上的视频。我的代码如下:
public void doShareVideo(View view) {
List<String> permissionNeeds = Arrays.asList("publish_actions","publish_pages");
//this loginManager helps you eliminate adding a LoginButton to your UI
LoginManager manager = LoginManager.getInstance();
manager.logInWithPublishPermissions(this, permissionNeeds);
Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
ShareVideo video = new ShareVideo.Builder()
.setLocalUrl(videoFileUri)
.build();
ShareVideoContent content = new ShareVideoContent.Builder()
.setVideo(video)
.setContentTitle("Video shared from my android apps")
.build();
ShareApi.share(content, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
error.printStackTrace();
}
});
}
但是我在运行时会收到错误消息:
10-10 02:57:40.714 19490-19490/? W/System.err: Error preparing share content: Permission denied
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.internal.ShareInternalUtility.invokeOnErrorCallback(ShareInternalUtility.java:529)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.internal.ShareInternalUtility.invokeCallbackWithError(ShareInternalUtility.java:98)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.internal.ShareInternalUtility.invokeCallbackWithException(ShareInternalUtility.java:90)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.ShareApi.shareVideoContent(ShareApi.java:417)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.ShareApi.share(ShareApi.java:186)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.facebook.share.ShareApi.share(ShareApi.java:79)
10-10 02:57:40.714 19490-19490/? W/System.err: at com.anhnn.facebooklogin.ShareLinkActivity.doShareVideo(ShareLinkActivity.java:189)
10-10 02:57:40.714 19490-19490/? W/System.err: at java.lang.reflect.Method.invoke(Native Method)
10-10 02:57:40.714 19490-19490/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
10-10 02:57:40.714 19490-19490/? W/System.err: at android.view.View$1.onClick(View.java:4015)
10-10 02:57:40.714 19490-19490/? W/System.err: at android.view.View.performClick(View.java:4780)
10-10 02:57:40.714 19490-19490/? W/System.err: at android.view.View$PerformClick.run(View.java:19866)
10-10 02:57:40.715 19490-19490/? W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
10-10 02:57:40.715 19490-19490/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
10-10 02:57:40.715 19490-19490/? W/System.err: at android.os.Looper.loop(Looper.java:135)
10-10 02:57:40.715 19490-19490/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5254)
10-10 02:57:40.715 19490-19490/? W/System.err: at java.lang.reflect.Method.invoke(Native Method)
10-10 02:57:40.715 19490-19490/? W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
10-10 02:57:40.715 19490-19490/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
10-10 02:57:40.715 19490-19490/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
10-10 02:57:40.757 19490-19490/? W/art: Attempt to remove local handle scope entry from IRT, ignoring
10-10 02:57:40.758 19490-19490/? W/AwContents: onDetachedFromWindow called when already detached. Ignoring
我使用了Facebook : com.facebook.android:facebook-android-sdk:4.6.0,请帮助我,非常感谢。
对于@Fyodor,我已经更改了代码,作为您的建议,但我什么也没有发生。登录Facebook并成功批准权限后,LogCat中不会显示任何日志信息或错误。我的新代码如下:
public class ShareVideoActivity extends AppCompatActivity {
private static final String LOG_TAG = "ShareVideo";
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this.getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_video);
callbackManager = CallbackManager.Factory.create();
LoginManager loginManager = LoginManager.getInstance();
loginManager.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// it would be nice here to check loginResult.getRecentlyGrantedPermissions() for requested permissions
Log.d(LOG_TAG, "Success " + loginResult.getRecentlyGrantedPermissions().toString());
Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
ShareVideo video = new ShareVideo.Builder()
.setLocalUrl(videoFileUri)
.build();
ShareVideoContent content = new ShareVideoContent.Builder()
.setVideo(video)
.setContentTitle("Video shared from my android apps")
.build();
ShareApi.share(content, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
error.printStackTrace();
}
});
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
List<String> permissionNeeds = Arrays.asList("publish_actions", "publish_pages");
loginManager.logInWithPublishPermissions(this, permissionNeeds);
}
}
你有什么新建议给我吗?提前谢谢。(我可以分享图片和链接,但遇到了视频问题)
发布于 2015-10-10 07:56:02
当你还没有被授予权限的时候,你似乎在尝试上传视频。尝试以下几点:
近似结果如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback < LoginResult > () {
@Override
public void onSuccess(LoginResult loginResult) {
// it would be nice here to check loginResult.getRecentlyGrantedPermissions() for requested permissions
Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
ShareVideo video = new ShareVideo.Builder()
.setLocalUrl(videoFileUri)
.build();
ShareVideoContent content = new ShareVideoContent.Builder()
.setVideo(video)
.setContentTitle("Video shared from my android apps")
.build();
ShareApi.share(content, new FacebookCallback < Sharer.Result > () {
@Override
public void onSuccess(Sharer.Result result) {
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
error.printStackTrace();
}
});
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
LoginManager.getInstance().logInWithPublishPermissions(this, permissionNeeds);
}
是的,这个代码可以而且应该得到改进,但是整个想法就在这里。
发布于 2015-10-10 09:18:24
原因是将视频上传到facebook需要一个名为"upload_video“的权限,如果这个权限不是由用户授予的,您就不能上传视频。
下面是确保权限的示例代码:
//Path to the video, Ex: path = Environment.getExternalStorageDirectory() + File.separator + "myVideo.mp4";
String path;
//get the current active facebook session
Session session = Session.getActiveSession();
//If the session is open
if(session.isOpened()) {
//Get the list of permissions associated with the session
List<String> permissions = session.getPermissions();
//if the session does not have video_upload permission
if(!permissions.contains("video_upload")) {
//Get the permission from user to upload the video to facebook
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, Arrays.asList("video_upload"));
session.requestNewReadPermissions(newPermissionsRequest);
}
//Create a new file for the video
File file = new File(path);
try {
//create a new request to upload video to the facebook
Request videoRequest = Request.newUploadVideoRequest(session, file, new Request.Callback() {
@Override
public void onCompleted(Response response) {
if(response.getError()==null)
{
Toast.makeText(MainActivity.this, "video shared successfully", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this, response.getError().getErrorMessage(), Toast.LENGTH_SHORT).show();
}
}
});
//Execute the request in a separate thread
videoRequest.executeAsync();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
//Session is not open
else {
Toast.makeText(getApplicationContext(), "Please login to facebook first", Toast.LENGTH_SHORT).show();
}
参考资料:
Facebook for android video upload - works with one app and not with another
Is uploading videos from an SD Card to Facebook possible with the Facebook SDK?
注意:根据FB的规则,视频应该少于12 FB
https://stackoverflow.com/questions/33051363
复制相似问题