2

私は Titanium 3.1 を使用しており、Android 3.0 以降向けに開発しています。

私のアプリには、クリックすると、写真を撮るか、ギャラリーから画像を選択するかを尋ねるビューがあります。カメラから写真を撮ることを選択すると、カメラは問題なく表示され、写真を撮ることができます。問題は、写真を撮って使用することを選択した後、アプリが最初から再開され、元に戻らないことです。写真を撮ることを選択する前に表示されていた以前の状態。

logcat を確認すると、次の行が表示されました。

I/TiRootActivity(24120): (main) [0,0] checkpoint, on root activity create, savedInstanceState: null

アプリの状態が保存されていないようですが、理由がわかりません。正直なところ、カメラ アプリに移動し、写真を撮ってアプリに戻るアプリに取り組んだのはこれが初めてです。以前は、Titanium で Intents を使用していましたが、戻るボタンを使用して Intent で開いたアプリケーションを終了した後、アプリの正しい状態に戻ることができました。

これは、カメラを開くために使用するコードです。

var globalBabyPicture = Titanium.UI.createImageView({   
    image:imagesPath + "kinedu_0027_ic_camara.png",
    width:75,   
});

var photoOptionsViewFromCamera = Ti.UI.createView({
    width:Ti.Platform.displayCaps.platformWidth,
    height:44, 
    left:0, 
    top:1*44,
    backgroundColor:"transparent"
});

var photoOptionsViewFromCameraLabel = Ti.UI.createLabel({
    text:"from camera", 
    font:{fontSize:14, fontFamily:"Arial Rounded MT Bold"}, 
    color:"#368cd6"
});

photoOptionsViewFromCamera.add(photoOptionsViewFromCameraLabel);

photoOptionsViewFromCamera.addEventListener("touchstart", function(e){
    var animateTouchStart = Ti.UI.createAnimation({backgroundColor:"#AFD1DE", duration:150});
    photoOptionsViewFromCamera.animate(animateTouchStart);

});

//********* this is the code that triggers the camera to take the picture
photoOptionsViewFromCamera.addEventListener("touchend", function(e){
    var animateTouchEnd = Ti.UI.createAnimation({backgroundColor:"transparent", duration:150});
    photoOptionsViewFromCamera.animate(animateTouchEnd);

    animateTouchEnd.addEventListener("complete", function(e){
        Ti.Media.showCamera({
            success : function(event) {

                var tmp = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory, ('baby_temp.png'));
                    tmp.write(event.media);
                    var blob = tmp.read();

                    Ti.App.fireEvent("changePicture");

                },
            cancel : function() {
            },
            error : function(error) {
                var message;
                if (error.code == Ti.Media.NO_CAMERA) {
                    message = 'Device does not have camera capabilities';
                } else {
                    message = 'Unexpected error: ' + error.code;
                }

                Ti.UI.createAlertDialog({
                    title : 'Camera',
                    message : message
                }).show();
            },
            saveToPhotoGallery : false,
            allowEditing : true,
            mediaTypes : [Ti.Media.MEDIA_TYPE_PHOTO]
        });     
    });
});


Ti.App.addEventListener("changePicture", function(e){
    var tmp = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory, ('baby_temp.png'));
    var blob = tmp.read();

    var animationChange = Ti.UI.createAnimation({opacity:0, duration:200});

    babyImage.animate(animationChange);

    var animationChangeCompleted = Ti.UI.createAnimation({opacity:1, duration:200});

    animationChange.addEventListener("complete", function(e){
        babyImage.setWidth(100);
        var image = blob.imageAsThumbnail(150);                         
        babyImage.setImage(image);              
        babyImage.animate(animationChangeCompleted);
    });             
});

確認したところ、成功のコールバックは行われません。アプリケーションが最初から再開され、アプリケーションのスプラッシュ画面が表示されたためだと思います。

写真を撮った後、アプリケーションを最初から再開せずに、アプリケーションが前のビューに戻るようにするにはどうすればよいですか?

4

1 に答える 1