2013-08-24 2 views
1

Я хочу поделиться изображением, которое находится на SD-карте телефона, на Facebook.Facebook и Android sdk

Моя проблема после того, как я запустить приложение, я могу увидеть следующее сообщение

MyApplication хотел бы получить доступ к общедоступный профиль и список друзей.

Но когда я нажимаю ОК, и я иду на страницу своего Facebook, я не вижу никаких изображений.

Я следую инструкциям на this link и мой код ниже

public class PhotoActivity extends BaseFragmentActivity { 
    private static final String MIME_TYPE = "image/jpeg"; 

    private Uri uri; 
    private ImageView mPhotoView; 

    private Session.StatusCallback mStatusCallback = new SessionStatusCallback(); 
    private boolean mPostToWall = false; 

    private ImageButton retakeBtn; 

    private class SessionStatusCallback implements Session.StatusCallback { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 

      if (session.isOpened() && mPostToWall) { 
       share(); 

      } 
     } 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Session.getActiveSession().addCallback(mStatusCallback); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Session.getActiveSession().removeCallback(mStatusCallback); 
    } 

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

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Session session = Session.getActiveSession(); 
     Session.saveSession(session, outState); 
    } 

    private void share() { 


     Bundle bundle = new Bundle(); 
     mPhotoView.setDrawingCacheEnabled(true); 
     mPhotoView.buildDrawingCache(); 
     Bitmap bmap = mPhotoView.getDrawingCache(); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); 
     byte[] byteArray = stream.toByteArray(); 

     bundle.putByteArray("picture", byteArray); 


      WebDialog feedDialog = (
       new WebDialog.FeedDialogBuilder(getApplicationContext(), 
        Session.getActiveSession(), 
        bundle)) 
       .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(getApplicationContext(), 
            "Posted story, id: "+postId, 
            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(); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTheme(R.style.AppTheme); 

     uri = getIntent().getData(); 

     setContentView(R.layout.activity_photo); 

     retakeBtn = (ImageButton) findViewById(R.id.retake_btn); 

     String lang = getString(R.string.lang); 
     if (lang.endsWith("FR")) { 
      retakeBtn.setImageResource(R.drawable.retake_xhdpi); 
     } else { 
      retakeBtn.setImageResource(R.drawable.retake_en_xhdpi); 

     } 

     // Facebook 
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, mStatusCallback, 
         savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 

       session.openForPublish(new Session.OpenRequest(PhotoActivity.this) 
         .setCallback(mStatusCallback).setPermissions(Arrays.asList("photo_upload","publish_stream","publish_actions"))); 


      } 
     } 

     mPhotoView = (ImageView) findViewById(R.id.photo); 
     mPhotoView.setImageURI(uri); 

     retakeBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(PhotoActivity.this, 
         CameraActivity.class); 
       startActivity(intent); 

       finish(); 
      } 
     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
     com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.item_photo_activity, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(
      com.actionbarsherlock.view.MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      Intent intent = new Intent(PhotoActivity.this, CameraActivity.class); 
      intent.putExtra("from_activity", 300); 
      startActivity(intent); 
      finish(); 
      break; 

     case R.id.share_button: 
      Session session = Session.getActiveSession(); 

      if (!session.isOpened() && !session.isClosed()) { 
       session.openForPublish(new Session.OpenRequest(PhotoActivity.this) 
         .setCallback(mStatusCallback).setPermissions(Arrays.asList("photo_upload","publish_stream","publish_actions"))); 


      } else { 
       Session.openActiveSession(PhotoActivity.this, true, 
         mStatusCallback); 
      } 
      break; 
     } 
     return true; 
    } 

ответ

1

Вы пытаетесь добавить фотографию в диалоговое окно фида, которое не принимает двоичные данные. См. feed dialog documentation here, параметр «картинка» принимает только URL.

Если вы хотите загрузить фотографию, вам необходимо получить разрешение «publish_actions» и вызвать метод Request.newUploadPhotoRequest. Посмотрите пример приложения Hello Facebook, который поставляется вместе с SDK, демонстрирует, как загрузить фотографию.

1

Убедитесь, что вы дали все разрешения в порядке.

Я думаю, что вы забыли добавить некоторые разрешения, такие как: «photo_upload», «publish_stream», «publish_actions».

Дайте это разрешение и попробуйте его, возможно, оно будет работать.

+0

Эй, я попробую ур предложение, но он все еще не работает, вы можете посмотреть мой код и помочь мне – Nik