1

アプリで写真を撮ってInstagramに送信したいのですが、写真を撮ったときにアプリが保存するのに時間がかかるため、問題があります。

私のアプリはこのようにやっています

まず、アプリで写真を撮り、この写真をギャラリーに保存します。

ユーザーが画像を承認した後。彼が承認すると、ボタンをクリックして Instagram に送信しますが、アプリが画像を保存するのに数秒かかる理由がわかりません。

使用したい画像を取得する方法は、フォルダーのギャラリーに保存した最後の画像を取得することです。

これは、写真を撮るために呼び出すコードです。

camera = cameraSurfaceView.getCamera();
camera.takePicture(new ShutterCallback() {

    @Override
    public void onShutter() {
        AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        mgr.playSoundEffect(AudioManager.FLAG_PLAY_SOUND);
    }
}, null, new HandlePictureStorage(preview,cameraSurfaceView.getFront()));

imageSelected = false;

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

写真を取得して保存するために使用するクラスは次のとおりです

public class HandlePictureStorage implements PictureCallback {

FrameLayout preview;
int wid = 0;
Bitmap bitmapFinal;
boolean front;

File storagePath = new File(Environment.getExternalStorageDirectory() + "/Tubagram/");

public HandlePictureStorage(FrameLayout preview, boolean front){
    this.preview = preview;
    this.front = front;
}

@Override
public void onPictureTaken(byte[] picture, Camera camera) {

    Matrix matrix = new Matrix();

    if (front){
        matrix.postRotate(270);
    }else{
        matrix.postRotate(90);
    }

    Bitmap cameraBitmap = BitmapFactory.decodeByteArray(picture, 0, picture.length);

    wid = cameraBitmap.getWidth();

    Bitmap scaledBitmap = Bitmap.createScaledBitmap(cameraBitmap, wid, wid, true);
    Bitmap imagemRotacionada = Bitmap.createBitmap(scaledBitmap,0,0,scaledBitmap.getWidth(),scaledBitmap.getHeight(),matrix,true);

    Bitmap newImage = Bitmap.createBitmap
            (612, 612, Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(newImage);

    canvas.drawBitmap(imagemRotacionada, 0f, 0f, null);

    Drawable drawable = preview.getForeground();
    drawable.setBounds(0, 0, 612, 612);
    drawable.draw(canvas);

    File myImage = new File(storagePath,"TUBAGRAM_" + System.currentTimeMillis() +".png");

    try
    {
        FileOutputStream out = new FileOutputStream(myImage);
        newImage.compress(Bitmap.CompressFormat.PNG, 100, out);
        bitmapFinal = newImage;

        out.flush();
        out.close();
        Log.i("Imagem Tubagram salva em ", ""+  myImage);
    }
    catch(FileNotFoundException e)
    {
        Log.d("In Saving File", e + "");    
    }
    catch(IOException e)
    {
        Log.d("In Saving File", e + "");
    }

    drawable = null;

//      newImage.recycle();
    newImage = null;

    cameraBitmap.recycle();
    cameraBitmap = null;
}

写真を受け入れてInstagramに送信するときのコードは次のとおりです

if (verificaInstagram()){

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

    Cursor c1 = pickLastPhotoAlbum();

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

    c1.close();

    startActivity(shareIntent);

}else{
    Toast.makeText(v.getContext(), "Você não possui o Instagram no seu smartphone!", Toast.LENGTH_SHORT).show();
}

誰でもこれで私を助けることができますか?

4

1 に答える 1

1

Ok。私はこれを行うことでこの質問を解決しました。

写真を保存するために使用するクラスは、この部分を変更しました...

FileOutputStream out = new FileOutputStream(myImage);
newImage.compress(Bitmap.CompressFormat.PNG, 100, out);
bitmapFinal = newImage;

out.flush();

そして今、私はこれを使用しています...

String nomeImagem = "TUBAGRAM_" + System.currentTimeMillis();
url = MediaStore.Images.Media.insertImage(preview.getContext().getContentResolver(), newImage ,nomeImagem, null);

そして、写真を受け入れてInstagramに送信するために使用するコードを次のように変更しました

caminhoImagens = getRealPathFromURI(Uri.parse(hps.getUrl()));

Log.i("Caminho imagem: ", caminhoImagens);

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + caminhoImagens));

shareIntent.setPackage("com.instagram.android");

そしてカーソルを引退させます。

于 2013-06-06T06:11:04.393 に答える