如何使用我的Android应用程序向Instagram发送照片?

如何使用我的Android应用程序向Instagram发送照片?,android,share,photo,instagram,Android,Share,Photo,Instagram,我的应用程序拍摄照片,我想在Instagram上分享 我的应用程序将图像保存在此目录中 File storagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera/tubagram"); 现在,我正在尝试使用此代码获取我在Instagram中分享的最后一张照片 Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); s

我的应用程序拍摄照片,我想在Instagram上分享

我的应用程序将图像保存在此目录中

File storagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera/tubagram");
现在,我正在尝试使用此代码获取我在Instagram中分享的最后一张照片

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/*");

final ContentResolver cr = getContentResolver();
final String[] p1 = new String[] {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN};
Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");

if (c1.moveToFirst() ) {

    Log.i("Test", "last picture (" + c1.getString(0) + ") taken on: " + new Date(c1.getLong(1)));
}

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+Environment.getExternalStorageDirectory() + "/DCIM/Camera/tubagram/" + c1.getString(0)));
shareIntent.setPackage("com.instagram.android");

c1.close();

startActivity(shareIntent);
我收到一封带有此错误消息“无法下载文件”的祝酒信。 这片土司由Instagram发送

我尝试使用这个链接示例,但没有成功。

我解决了我的问题

我在照相机后面加上这一行

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
在手机识别出储存在手机上的新闻照片后,此线路会进行“刷新”

我对我的方法做了一些改变

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/*");                 

final ContentResolver cr = getContentResolver();
final String[] p1 = new String[] {
    MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.TITLE, MediaStore.Images.ImageColumns.DATE_TAKEN
};
Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");

if (c1.moveToFirst() ) {
    Log.i("Test", "last picture (" + c1.getString(1) + ") taken on: " + new Date(c1.getLong(2)));
}

Log.i("Image path", "file://"+Environment.getExternalStorageDirectory()+ "/Tubagram/"  + c1.getString(1) + ".png");

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+Environment.getExternalStorageDirectory()+ "/Tubagram/" + c1.getString(1)+".png"));
shareIntent.setPackage("com.instagram.android");

c1.close();

startActivity(shareIntent);
我用另一种方法验证Instagram是否安装在手机上

private boolean verifyInstagram(){
    boolean installed = false;

    try {
        ApplicationInfo info = getPackageManager().getApplicationInfo("com.instagram.android", 0);
        installed = true;
    } catch (NameNotFoundException e) {
        installed = false;
    }
        return installed;
    }

将此代码放入按钮单击侦听器,它会将您重定向到应用程序中,并确保您的设备已安装Instagram应用程序

String type = "image/*";
imageview.buildDrawingCache();
Bitmap bmap = imageview.getDrawingCache();
Uri bmpUri = getLocalBitmapUri(bmap);
Intent share = new Intent(Intent.ACTION_SEND);
if (Utils.isPackageExisted(this,"com.instagram.android")) {
 share.setPackage("com.instagram.android");
}
share.setType(type);
share.putExtra(Intent.EXTRA_STREAM, bmpUri);
startActivity(Intent.createChooser(share, "Share to"));

请尝试以下代码:

File mFileImagePath = " /storage/emulated/0/Image Editor/Media/FilterImages/Image_Editor_1547816365839.jpg  ";  // Just example you use file URL

private boolean checkAppInstall(String uri) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        //Error
    }

    return false;
}


private void shareInstagram(File mFileImagePath) {
    Intent intent = getPackageManager().getLaunchIntentForPackage("com.instagram.android");
    if (intent != null) {
        Intent mIntentShare = new Intent(Intent.ACTION_SEND);
        String mStrExtension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(mFileImagePath).toString());
        String mStrMimeType = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(mStrExtension);
        if (mStrExtension.equalsIgnoreCase("") || mStrMimeType == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            mIntentShare.setType("text*//*");
        } else {
            mIntentShare.setType(mStrMimeType);
        }
        mIntentShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFileImagePath));
        mIntentShare.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        mIntentShare.setPackage("com.instagram.android");
        startActivity(mIntentShare);
    } else {
        Toast.makeText(mContext, "Instagram have not been installed.", Toast.LENGTH_SHORT).show();
    }
}

此代码适用于我,并将适用于所有Android设备。

请尽量使用英文方法和变量,让每个人都能更好地理解你想做什么。你是否也能够将你的应用程序名与图像一起发送,以便其他人能够识别此内容是通过不同的应用程序而不是Instagram直接发送的?
getLocalBitmapUri
?getLocalBitmapUri是从位图图像中提供uri的函数代码如下:. <代码>公共Uri getLocalBitmapUri(位图bmp){Uri bmpUri=null;尝试{File File File=new File(getExternalFilesDir(Environment.DIRECTORY\u PICTURES),“share\u image”+System.currentTimeMillis()+“.png”);FileOutputStream out=new FileOutputStream(File);bmp.compress(Bitmap.CompressFormat.png,90,out);out.close();bmpUri=Uri.fromFile(file);}catch(IOException e){e.printStackTrace();}返回bmpUri;}