Skip to content

Instantly share code, notes, and snippets.

@es0329
Created November 17, 2016 18:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save es0329/b41089ed3994b903b2711b7c8b43588a to your computer and use it in GitHub Desktop.
Save es0329/b41089ed3994b903b2711b7c8b43588a to your computer and use it in GitHub Desktop.
Share .mp4 video to Instagram via Android Intent
-> adb shell pm list packages -f
...
package:/data/app/com.instagram.android-2.apk=com.instagram.android
...
-> adb shell pm dump com.instagram.android | grep -A 1 MAIN
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14008000 cmp=com.instagram.android/.activity.MainTabActivity}
realActivity=com.instagram.android/.activity.MainTabActivity
--
android.intent.action.MAIN:
65143b78 com.instagram.android/.activity.MainTabActivity filter 64ff3d90
--
Action: "android.intent.action.MAIN"
Category: "android.intent.category.LAUNCHER"
-> adb shell pm list packages -f
...
package:/data/app/com.instagram.android-1/base.apk=com.instagram.android
...
-> adb shell pm dump com.instagram.android | grep -A 1 MAIN
android.intent.action.MAIN:
3d2eec5 com.instagram.android/.activity.MainTabActivity filter 770faff
--
Action: "android.intent.action.MAIN"
Category: "android.intent.category.LAUNCHER"
--
privateFlags=[ HAS_DOMAIN_URLS ]
dataDir=/data/user/0/com.instagram.android
public void startInstagram(String mediaPath) {
final String INSTAGRAM_PACKAGE_NAME = "com.instagram.android";
try {
File media = new File(mediaPath);
Uri uri = Uri.fromFile(media);
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("video/*");
share.putExtra(Intent.EXTRA_STREAM, uri);
share.setPackage(INSTAGRAM_PACKAGE_NAME);
startActivity(share);
// startActivity(Intent.createChooser(share, R.string.chooserTitle));
} catch (Exception e) { // Instagram package not present on device
Toast.makeText(getActivity(), R.string.instagramRequirement, Toast.LENGTH_SHORT)
.show();
try { // Prompt to install Instagram via Google Play
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + INSTAGRAM_PACKAGE_NAME)));
} catch (ActivityNotFoundException anfe) { // Prompt to install Instagram via browser
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id="
+ INSTAGRAM_PACKAGE_NAME)));
}
}
}
@es0329
Copy link
Author

es0329 commented Nov 17, 2016

Following Instagram's video sharing Android Intent. Trivial edit to bypass a chooser and launch Instagram directly.

Kit Kat device works as intended, however Nougat device falls to L20, launching Play Store, as if Instagram isn't installed.

On both devices L14 of ShareDialog's startInstagram() does present a chooser of video-sharing capable apps, including Instagram.

Related code for sharing an image with this same approach works as intended on both devices.

@es0329
Copy link
Author

es0329 commented Nov 17, 2016

Output from L15 Exception

E/ShareDialog: e.getLocalizedMessage >> file:///storage/emulated/0/870_90.mp4 exposed beyond app through ClipData.Item.getUri()
E/ShareDialog: e.getCause >> null

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment