2012-10-15 9 views
17

私はすでにこのコードを試しましたが、私のアカウントで共有された写真は見ませんでした。アンドロイドアプリを通じてgoogle Plusで画像を共有するには?

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

ログを確認しましたか? – pedrofurla

+0

アプリケーションが起動すると、「あなたのSDカードにのみ写真を投稿することができます」というメッセージが表示されます。しかし、私はSDカードから写真のアドレスを与えています。私は理解していない問題は何ですか? –

+0

@DeepikaLalra私は同様の問題があります。あなたはお勧めできますか? – Apparatus

答えて

2

コード内でForGooglePlus活動を統合し、URL(IMAGEURL)、説明(説明テキスト)と同じためcontentUrl(URL)を置きます。 注:私のアプリでは、ベローズコードも機能しました。

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

Google+アプリはcontent:// URIsのみをサポートしています。このためにはMediaStore APIを使用する必要があります。

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

それは私にFileNotFoundException()を与えます。画像のフルパスが得られていないので、「sdcard/1346249742258.jpg」のみを取ります。 –

+0

絶対パスを入力してください。 –

+1

これは、使用目的に合った正しいデバイスにインストールされたGoogle+が必要です。私はインテントを使いたくないのですが、プログラムでそれをやりますか?ここでは私の質問です.http://stackoverflow.com/questions/18955084/share-photo-on-google-plus-using-android-sdk-not-by-share-intent – Scorpion

3

私はまた、Googleでプラス私は、デバイスのスクリーンショットを取っていますアンドロイド使って意思を介して画像を投稿し、Googleに掲載プラス、私は)あなたのコード私は例外にFileNotFoundExceptionを(取得していますを使用して、あなたが使用することを言及しています私は、エラー、 方法getAbsolutePath()を得た絶対パスは私のコードが 以下の通りです String型のために定義されていない私を提案してください訂正符号で

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; 
     } 
    } 

ありがとうと ニティン

について
1

絶対パスは使用しないでください。

OnActivityResult()は、カメラから画像をキャプチャした後に使用します。

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); 

これは私のために働いています。

1

そのグーグルプラスアプリは、あなたがコード化されている方法は、それが唯一のネイティブ場合は動作するデバイス

からネイティブアプリを起動することでデバイス上に存在しないので、ちょっとDeepikaは、ファイルも見つかった例外を取得していますapは

otherwayはあなたがイメージ

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

0

を共有できる小さなjarファイルであるグーグルプラスSDKはあなたがAPIの下に使用して画像を共有することができることですactully存在しています。詳細な手順についてはチュートリアルにチェック

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); 
     } 
    } 
} 
関連する問題