アプリで写真を撮って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();
}
誰でもこれで私を助けることができますか?