使用PanoramaApi和Assets文件夹中的自定义equirectangular图像

时间:2016-01-25 11:08:07

标签: android google-api-client android-assets

我有一个像这样的equirectangular图像:

equirectangular image

我在AssetsFolder中有图像,因此我将此uri传递给Panorama.PanoramaApi.loadPanoramaInfo方法:

Uri uri = Uri.parse("file:///android_asset/panorama/equi_1.jpg");

不知何故,如果我检查result.getViewerIntent,我得到null作为返回值。

我的直觉说这可能与这个图像不是用谷歌相机应用程序创建的事实有关,因此缺少一些元标记,但我不确定。

我的PanoramaActivity的完整代码:

public class PanoramaActivity extends Activity implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {

    public static final String PANORAMA_URI = "panorama_uri";
    private GoogleApiClient gacClient;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gacClient = new GoogleApiClient.Builder(this, this, this)
                .addApi(Panorama.API)
                .build();
    }

    @Override
    public void onStart() {
        super.onStart();
        gacClient.connect();
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        Intent intent = getIntent();
        if (intent != null) {
            String fileUri = intent.getStringExtra(PANORAMA_URI);
            if (fileUri != null && !fileUri.isEmpty()) {
                Uri uri = Uri.parse("file:///android_asset/panorama" + fileUri);

                Panorama.PanoramaApi.loadPanoramaInfo(gacClient, uri).setResultCallback(
                        new ResultCallback<PanoramaApi.PanoramaResult>() {
                            @Override
                            public void onResult(PanoramaApi.PanoramaResult result) {
                                Intent i;
                                if (result.getStatus().isSuccess() && (i = result.getViewerIntent()) != null) {
                                    startActivity(i);
                                } else {
                                    // Handle unsuccessful result
                                }
                            }
                        });
            } else {
                finish();
            }
        } else {
            finish();
        }
    }

    @Override
    public void onConnectionSuspended(int cause) {
        // Handle connection being suspended
    }

    @Override
    public void onConnectionFailed(ConnectionResult status) {
        // Handle connection failure.
    }

    @Override
    public void onStop() {
        super.onStop();
        gacClient.disconnect();
    }
}

1 个答案:

答案 0 :(得分:1)

我认为你的直觉是正确的,谷歌可能需要元数据来解析图像。

这是我找到的。

这个人here提到使用photoshop将xml元数据嵌入到jpg中。

Dim db as New DBDataContext
Dim oldJobPart = (From jp In db.JobParts
                 Where jp.JobNum = 10214
                 Select jp).AsNoTracking().ToArray

超过here项目显示了在全景api中加载jpg的示例。我不知道如何阅读该jpg中的元数据,但我冒昧地说这对你来说非常有趣并且可能很有帮助。 jpg位于raw assets文件夹中。