Как обмениваться изображениями в google Plus через приложение 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);
Ответы
Ответ 1
Интегрируйте действие 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();
}
}
}
}
Ответ 2
Приложение Google+ поддерживает content://URI. Для этой цели вам понадобится API MediaStore
.
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");
Ответ 3
Я также размещаю изображение на google plus через android, используя намерение. Я делаю снимок экрана и размещаю его на google plus, я использовал ваш код. Я получаю исключение FileNotFoundException(), и, как вы говорите, использовать абсолютный путь, который я получил ошибка,
Метод getAbsolutePath() - undefined для типа 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;
}
}
Спасибо и приветствую
Нитин
Ответ 4
Не используйте абсолютный путь.
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);
Это работает для меня.
Ответ 5
Здравствуйте, Deepika, вы получаете файл или не обнаружили исключение, потому что это приложение google plus отсутствует на устройстве, так как вы закодировали только для запуска собственного приложения с устройства.
он будет работать только в том случае, если нативный ap будет присутствовать
иначе будет иметь google plus sdk, который является небольшим файлом jar, с которым вы можете обмениваться изображением
https://developers.google.com/+/mobile/android/
Ответ 6
Вы можете обмениваться изображениями, используя приведенные ниже api. Подробные инструкции по проверке шагов
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);
}
}
}
Ответ 7
Google Plus прекратил предоставление доступа к контентной службе с декабря 2018 года. Для получения дополнительной информации перейдите по ссылке ниже https://support.google.com/plus/answer/9217723?hl=ru.