मुझे पता चला कि आप केवल पाठ या छवि साझा कर सकते हैं , दोनों का उपयोग नहीं Intents
। नीचे दिए गए कोड शेयरों में केवल छवि मौजूद है, या केवल पाठ यदि छवि बाहर नहीं निकलती है। यदि आप दोनों को साझा करना चाहते हैं, तो आपको उपयोग करने की आवश्यकता है यहां से फेसबुक एसडीके है।
यदि आप नीचे दिए गए कोड के बजाय अन्य समाधान का उपयोग करते हैं, तो पैकेज नाम com.facebook.lite निर्दिष्ट करना न भूलें , जो कि फेसबुक लाइट का पैकेज नाम है । मैंने परीक्षण नहीं किया है, लेकिन com.facebook.orca फेसबुक मैसेंजर का पैकेज नाम है यदि आप उसे भी लक्षित करना चाहते हैं।
आप व्हाट्सएप , ट्विटर के साथ साझा करने के लिए और अधिक तरीके जोड़ सकते हैं ...
public class IntentShareHelper {
public static void shareOnFacebook(AppCompatActivity appCompatActivity, String textBody, Uri fileUri) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,!TextUtils.isEmpty(textBody) ? textBody : "");
if (fileUri != null) {
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType("image/*");
}
boolean facebookAppFound = false;
List<ResolveInfo> matches = appCompatActivity.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : matches) {
if (info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.katana") ||
info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.lite")) {
intent.setPackage(info.activityInfo.packageName);
facebookAppFound = true;
break;
}
}
if (facebookAppFound) {
appCompatActivity.startActivity(intent);
} else {
showWarningDialog(appCompatActivity, appCompatActivity.getString(R.string.error_activity_not_found));
}
}
public static void shareOnWhatsapp(AppCompatActivity appCompatActivity, String textBody, Uri fileUri){...}
private static void showWarningDialog(Context context, String message) {
new AlertDialog.Builder(context)
.setMessage(message)
.setNegativeButton(context.getString(R.string.close), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setCancelable(true)
.create().show();
}
}
फ़ाइल से उरी प्राप्त करने के लिए , नीचे दिए गए वर्ग का उपयोग करें:
public class UtilityFile {
public static @Nullable Uri getUriFromFile(Context context, @Nullable File file) {
if (file == null)
return null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
try {
return FileProvider.getUriForFile(context, "com.my.package.fileprovider", file);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} else {
return Uri.fromFile(file);
}
}
public static Uri getLocalBitmapUri(Context context, ImageView imageView) {
Drawable drawable = imageView.getDrawable();
Bitmap bmp = null;
if (drawable instanceof BitmapDrawable) {
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
} else {
return null;
}
Uri bmpUri = null;
try {
File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
bmpUri = getUriFromFile(context, file);
} catch (IOException e) {
e.printStackTrace();
}
return bmpUri;
}
}
FileProvider लिखने के लिए , इस लिंक का उपयोग करें: https://github.com/codepath/android_guides/wiki/Sharing-Content-with-Intents