2012-10-15 31 views
17

Tôi đã thử mã này nhưng tôi không thấy ảnh được chia sẻ trong tài khoản của mình.Cách chia sẻ hình ảnh trong google Plus thông qua ứng dụng android?

File file = new File("sdcard/1346249742258.jpg"); 
String photoUri = null; 
photoUri = file.getAbsolutePath(); 

Intent shareIntent = ShareCompat.IntentBuilder.from(this) 
     .setText("Sharing an image on Google!").setType("image/jpeg") 
     .setStream(Uri.parse(photoUri)).getIntent() 
     .setPackage("com.google.android.apps.plus"); 
startActivity(shareIntent); 
+0

Đã kiểm tra nhật ký? – pedrofurla

+0

khi ứng dụng bắt đầu nó cho thấy một bánh mì nướng có một thông điệp "bạn chỉ có thể đăng hình ảnh trình bày trên thẻ sd của bạn chỉ". nhưng tôi đang đưa địa chỉ của ảnh từ thẻ sd. vấn đề tôi không hiểu là gì? –

+0

@DeepikaLalra Tôi có vấn đề tương tự. Bạn có thể đề nghị không? – Apparatus

Trả lời

2

Tích hợp Hoạt động ForGooglePlus trong mã của bạn và đặt URL (imageurl), mô tả (mô tả văn bản) và contentURL (URL) cho giống nhau. Lưu ý: mã dưới đây cũng hoạt động trong ứng dụng của tôi.

public class ForGooglePlus extends Activity 
{ 
    private String imageUrl, description, contentUrl; 
    private Context mContext; 
    private int REQUEST_FOR_GOOGLE_PLUS = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     mContext = this; 
     imageUrl = getIntent().getStringExtra("URL"); 
     description = getIntent().getStringExtra("Description"); 
     contentUrl = getIntent().getStringExtra("contentUrl"); 

     if (isPackageInstalled("com.google.android.apps.plus", mContext)) { 
      if (imageUrl == null) { 
       imageUrl = ""; 
      } 
      if (description == null) { 
       description = ""; 
      } 
      // Intent shareIntent = new PlusShare.Builder(this) 
      // .setType("image/jpeg") 
      // .setText(description) 
      // .setStream(getUriFromUrl(imageUrl)) 
      // .setContentUrl(Uri.parse(contentUrl)) 
      // .getIntent(); 

      Uri uri = getUriFromUrl(imageUrl); 
      if (uri != null) { 
       Intent shareIntent = ShareCompat.IntentBuilder 
         .from(ForGooglePlus.this) 
         .setText(description + "\n" + contentUrl) 
         .setType("image/jpeg").setStream(uri).getIntent() 
         .setPackage("com.google.android.apps.plus"); 
       startActivityForResult(shareIntent, REQUEST_FOR_GOOGLE_PLUS); 
      } else { 
       Intent shareIntent = ShareCompat.IntentBuilder 
         .from(ForGooglePlus.this) 
         .setText(description + "\n" + contentUrl) 
         .setType("image/jpeg").getIntent() 
         .setPackage("com.google.android.apps.plus"); 
       startActivityForResult(shareIntent, REQUEST_FOR_GOOGLE_PLUS); 
      } 
     } else { 
      Toast.makeText(mContext, "Application not found", Toast.LENGTH_LONG) 
        .show(); 
      finish(); 
     } 
    } 

    public Uri getUriFromUrl(String thisUrl) { 
     try { 

      Bitmap inImage = ImageLoader.getInstance().loadImageSync(thisUrl); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      String path = Images.Media.insertImage(
        mContext.getContentResolver(), inImage, "Title", null); 
      return Uri.parse(path); 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 

     } 
     return null; 
    } 

    private boolean isPackageInstalled(String packagename, Context context) { 
     PackageManager pm = context.getPackageManager(); 
     try { 
      pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES); 
      return true; 
     } catch (NameNotFoundException e) { 
      return false; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == REQUEST_FOR_GOOGLE_PLUS) { 
      if (resultCode == RESULT_OK) { 
       finish(); 
      } else { 
       Toast.makeText(mContext, 
         mContext.getString(R.string.msg_gp_cancel), 
         Toast.LENGTH_LONG).show(); 
       finish(); 
      } 
     } 
    } 

} 
26

Ứng dụng Google+ chỉ hỗ trợ content:// URIs. Bạn sẽ cần sử dụng API MediaStore cho mục đích này.

File tmpFile = new File("/path/to/image"); 
final String photoUri = MediaStore.Images.Media.insertImage(
     getContentResolver(), tmpFile.getAbsolutePath(), null, null); 

Intent shareIntent = ShareCompat.IntentBuilder.from(this) 
     .setText("Hello from Google+!") 
     .setType("image/jpeg") 
     .setStream(Uri.parse(photoUri)) 
     .getIntent() 
     .setPackage("com.google.android.apps.plus"); 
+0

nó mang lại cho tôi FileNotFoundException(). bởi vì nó không nhận được đường dẫn đầy đủ của hình ảnh nó chỉ dùng "sdcard/1346249742258.jpg". –

+0

Hãy thử đường dẫn tuyệt đối. –

+1

Đối với điều này, chúng tôi cần Google+ được cài đặt trên thiết bị chính xác như ý định sử dụng của thiết bị. Tôi không muốn sử dụng Intent, chúng ta có thể làm điều đó theo chương trình được không. Đây là câu hỏi của tôi về SO..http: //stackoverflow.com/questions/18955084/share-photo-on-google-plus-using-android-sdk-not-by-share-intent – Scorpion

3

Tôi cũng đăng hình ảnh trên google plus qua android sử dụng ý tôi đang chụp ảnh chụp màn hình của thiết bị và đăng nó trên google plus, tôi sử dụng mã của bạn tôi đang nhận được ngoại lệ FileNotFoundException() và như bạn đề cập đến sử dụng đường dẫn tuyệt đối tôi đã nhận lỗi, phương pháp getAbsolutePath() là undefined cho kiểu string mã của tôi được đưa ra dưới đây tôi xin đề nghị chỉnh trong mã

package com.testproject; 


    import java.io.File; 
    import java.io.FileNotFoundException; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.graphics.Bitmap; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.provider.MediaStore; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.RelativeLayout; 

    public class TestProjectActivity extends Activity { 

     private Button share_btn = null; 
     private String url=null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      share_btn = (Button)findViewById(R.id.share_btn); 
      share_btn.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 
        // TODO Auto-generated method stub 
        Intent intent=new Intent(TestProjectActivity.this,ShareDialogActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
        startActivityForResult(intent, 1); 
       } 
      }); 
     } 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      String url =takeScreenShot(); 
      super.onActivityResult(requestCode, resultCode, data); 
      switch (resultCode) { 
      case 1: 
       String share = data.getExtras().getString("NAME"); 
       if(share!=null && share.equalsIgnoreCase("Share with Instagram")){ 
        Intent i = new Intent(Intent.ACTION_SEND); 
        i.setType("image/jpg"); 
        i.putExtra(Intent.EXTRA_STREAM, Uri.parse(url)); 
        startActivity(Intent.createChooser(i, "Share Image")); 
       } 

       if(share!=null && share.equalsIgnoreCase("Share with GooglePlus")){ 
        Intent shareIntent = new Intent(Intent.ACTION_SEND); 
        File tmpFile = new File(url); 
        String photoUri=null; 
        photoUri = url.getAbsolutePath(); 
        try { 
         photoUri = MediaStore.Images.Media.insertImage(
           getContentResolver(), tmpFile.getAbsolutePath(), null, null); 
         shareIntent = ShareCompat.IntentBuilder.from(this) 
         .setText("Hello from Google+!") 
         .setType("image/jpeg") 
         .setStream(Uri.parse(photoUri)) 
         .getIntent() 
         .setPackage("com.google.android.apps.plus"); 
         startActivity(shareIntent); 
        } catch (FileNotFoundException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
       break; 
      } 
     } 
     public String takeScreenShot(){ 
      try{ 
       RelativeLayout view = (RelativeLayout)findViewById(R.id.icflag_layout); 
       View v1 = view.getRootView(); 
       System.out.println("Root View : "+v1); 
       v1.setDrawingCacheEnabled(true); 
       Bitmap bm = v1.getDrawingCache(); 
       url =MediaStore.Images.Media.insertImage(getContentResolver(), bm,"screeshot.jpg", 1233+ ".jpg Card Image"); 
      } 
      catch(OutOfMemoryError e){ 

      } 
      return url; 
     } 
    } 

Cảm ơn bạn và liên quan Nitin

1

Không sử dụng đường dẫn tuyệt đối.

OnActivityResult() sử dụng tính năng này sau khi chụp ảnh từ máy ảnh.

Uri photoUri = intent.getData();     
Intent shareIntent = ShareCompat.IntentBuilder.from(this) 
         .setText("Hello From Google+!") 
          .setType("image/jpeg") 
          .setStream(photoUri) 
          .getIntent() 
        .setPackage("com.google.android.apps.plus"); 
startActivity(shareIntent); 

Điều này phù hợp với tôi.

1

hey Deepika bạn đang nhận được tập tin cũng không tìm thấy ngoại lệ vì đó google plus ứng dụng không có mặt trên thiết bị theo cách bạn đã được mã hóa chỉ là để bắt đầu ứng dụng có nguồn gốc từ các thiết bị

nó sẽ chỉ làm việc nếu mẹ đẻ ap là actully hiện

otherway là phải có google plus sdk đó là file jar nhỏ với điều đó bạn có thể chia sẻ hình ảnh

https://developers.google.com/+/mobile/android/

0

bạn có thể chia sẻ hình ảnh sử dụng dưới đây của api. Đối với các bước chi tiết kiểm tra hướng dẫn

http://androidsrc.net/integrating-google-plus-sign-in-into-your-android-application/

/** 
    * API to process media post request start activity with MIME type as video 
    * and image 
    */ 
    private void processShareMedia() { 
     Intent photoPicker = new Intent(Intent.ACTION_PICK); 
     photoPicker.setType("video/*, image/*"); 
     startActivityForResult(photoPicker, PICK_MEDIA_REQUEST_CODE); 

    } 

/** 
* Handle results for your startActivityForResult() calls. Use requestCode 
* to differentiate. 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_MEDIA_REQUEST_CODE) { 
     // If picking media is success, create share post using 
     // PlusShare.Builder 
     if (resultCode == RESULT_OK) { 
      Uri selectedImage = data.getData(); 
      ContentResolver cr = this.getContentResolver(); 
      String mime = cr.getType(selectedImage); 

      PlusShare.Builder share = new PlusShare.Builder(this); 
      share.setText("Hello from AndroidSRC.net"); 
      share.addStream(selectedImage); 
      share.setType(mime); 
      startActivityForResult(share.getIntent(), 
        SHARE_MEDIA_REQUEST_CODE); 
     } 
    } 
} 
Các vấn đề liên quan