目录

1. 调用方式说明

    全景服务有应用外全景展示调用和应用内全景展示调用两种用法:

2. 应用外全景展示调用

使用应用外全景展示调用时,需要先从全景服务获取用于跳转到全景Activity的Intent,然后通过startActivity传入此Intent,并完成跳转来展示全景图。详细步骤如下:

将全景图的Uri作为输入参数,随后获取可跳转到全景展示Activity的Intent,并完成跳转。

与之相关的接口为:

PendingResult<ImageInfoResult> loadImageInfo (Context context, Uri uri);

PendingResult<ImageInfoResult> loadImageInfoWithPermission (Context context, Uri uri);

Parameter nameParameter desc
context应用上下文,如果需要主动触发升级,需要传入Activity。
uri将要加载的全景图URI,支持以file、content及android.resource开头的三类Uri。
说明:

Android 10.0及以上的版本由于沙盒机制的原因,无法直接通过路径访问外部存储下的媒体文件,请通过ContentResolver获取媒体文件的Uri。

获取Intent的方法分为同步调用和异步调用,示例代码如下:

  1. new Thread(new Runnable() {
  2.    @Override
  3.    public void run() {
  4.        PanoramaInterface.ImageInfoResult panoramaResult = Panorama.getInstance().loadImageInfo(MainActivity.this, uri).await();
  5.        if (panoramaResult == null) {
  6.            Log.e(LOG_TAG, "ImageInfoResult is null");
  7.            return;
  8.        }
  9.        if (panoramaResult.getStatus().isSuccess()) {
  10.            Intent intent = panoramaResult.getImageDisplayIntent();
  11.            if (intent != null) {
  12.                 startActivity(intent);
  13.            }
  14.        } else {
  15.             Log.e(LOG_TAG, "error: " + panoramaResult);
  16.        }
  17.    }
  18. }).start();
说明:
同步接口请勿在主线程中调用,否则容易出现ANR。
  1. Panorama.getInstance().loadImageInfo(this, uri).setResultCallback(
  2.    new ResultCallback<PanoramaInterface.ImageInfoResult>() {
  3.        @Override
  4.        public void onResult(PanoramaInterface.ImageInfoResult panoramaResult) {
  5.            if (panoramaResult == null) {
  6.                Log.e(LOG_TAG, "ImageInfoResult is null");
  7.                return;
  8.            }
  9.            if (panoramaResult.getStatus().isSuccess()) {
  10.                Intent intent = panoramaResult.getImageDisplayIntent();
  11.                if (intent != null) {
  12.                    startActivity(intent);
  13.                }
  14.            } else {
  15.                Log.e(LOG_TAG, "error: " + panoramaResult);
  16.            }
  17.        }
  18.    });
说明:

3. 未包含图元信息的全景展示

某些全景图没有元数据信息,但是开发者需要展示该全景图,那么就必须强制指定全景图类型,与之相关的接口为:

PendingResult<ImageInfoResult> loadImageInfo(Context context, Uri uri, int type);

PendingResult<ImageInfoResult> loadImageInfoWithPermission(Context context, Uri uri, int type);

Parameter nameParameter desc
context应用上下文,如果需要主动触发升级,需要传入Activity。
uri将要加载的全景图URI,支持以file、content及android.resource开头的三类Uri。
type图片类型,当前支持球形全景图、柱状全景图。

上述接口获取跳转Intent的方式与loadImageInfo完全相同,示例代码如下:

  1. new Thread(new Runnable() {
  2.    @Override
  3.    public void run() {
  4.        PanoramaInterface.ImageInfoResult panoramaResult = Panorama.getInstance().loadImageInfo(MainActivity.this, uri, PanoramaInterface.IMAGE_TYPE_SPHERICAL).await();
  5.        if (panoramaResult == null) {
  6.            Log.e(LOG_TAG, "ImageInfoResult is null");
  7.            return;
  8.        }
  9.        if (panoramaResult.getStatus().isSuccess()) {
  10.            Intent intent = panoramaResult.getImageDisplayIntent();
  11.            if (intent != null) {
  12.                startActivity(intent);
  13.            }
  14.        } else {
  15.            Log.e(LOG_TAG, "error: " + panoramaResult);
  16.        }
  17.    }
  18. }).start();
  1. Panorama.getInstance().loadImageInfo(this, uri,  PanoramaInterface.IMAGE_TYPE_SPHERICAL).setResultCallback(
  2.    new ResultCallback<PanoramaInterface.ImageInfoResult>() {
  3.        @Override
  4.        public void onResult(PanoramaInterface.ImageInfoResult panoramaResult) {
  5.            if (panoramaResult == null) {
  6.                Log.e(LOG_TAG, "ImageInfoResult is null");
  7.                return;
  8.            }
  9.            if (panoramaResult.getStatus().isSuccess()) {
  10.                Intent intent = panoramaResult.getImageDisplayIntent();
  11.                if (intent != null) {
  12.                    startActivity(intent);
  13.                }
  14.            } else {
  15.                Log.e(LOG_TAG, "error: " + panoramaResult);
  16.            }
  17.        }
  18.    });
说明: