gpt4 book ai didi

android - 如何将共享首选项从即时应用转移到完整应用

转载 作者:行者123 更新时间:2023-11-29 02:22:55 25 4
gpt4 key购买 nike

我知道我们可以使用 Google Instant 的存储 api 将数据从即时应用程序传输到完整应用程序,如前所述 here .

对于运行 OS 版本低于 Oreo 的设备,我尝试按如下方式读取数据:

 public void getInstantAppData(final Activity activity, final InstantAppDataListener listener) {
InstantApps.getInstantAppsClient(activity)
.getInstantAppData()
.addOnCompleteListener(new OnCompleteListener<ParcelFileDescriptor>() {
@Override
public void onComplete(@NonNull Task<ParcelFileDescriptor> task) {

try {
FileInputStream inputStream = new FileInputStream(task.getResult().getFileDescriptor());
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
ZipInputStream zipInputStream = new ZipInputStream(bufferedInputStream);

ZipEntry zipEntry;

while ((zipEntry = zipInputStream.getNextEntry()) != null) {
Log.i("Instant-app", zipEntry.getName());
if (zipEntry.getName().equals("shared_prefs/")) {
extractSharedPrefsFromZip(activity, zipEntry);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}

private void extractSharedPrefsFromZip(Activity activity, ZipEntry zipEntry) throws IOException {
File file = new File(activity.getApplicationContext().getFilesDir() + "/shared_prefs.vlp");
mkdirs(file);
FileInputStream fis = new FileInputStream(zipEntry.getName());

BufferedInputStream bis = new BufferedInputStream(fis);
ZipInputStream stream = new ZipInputStream(bis);
byte[] buffer = new byte[2048];

FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length);

int length;
while ((length = stream.read(buffer)) > 0) {
bos.write(buffer, 0, length);
}
}

但是我得到一个错误Method throw 'java.io.FileNotFoundException' exception. 基本上,当我试图读取 shared_pref 文件时,它无法找到它。文件的全名是什么?是否有更好的方法将我的共享偏好数据从免安装应用程序传输到已安装的应用程序。

最佳答案

花了几个小时后,我能够让它工作,但后来我发现了一种更好、更简单的方法来做到这一点。 Google 还有一个 cookies api,可用于在用户升级时将数据从即时应用程序共享到您的完整应用程序。

文档:https://developers.google.com/android/reference/com/google/android/gms/instantapps/PackageManagerCompat#setInstantAppCookie(byte%5B%5D)

样本:https://github.com/googlesamples/android-instant-apps/tree/master/cookie-api

我更喜欢这个,因为它更简洁、易于实现,但最重要的是,您不必将可安装应用的目标沙盒版本增加到 2,如果您使用存储 API,这是必需的。它适用于操作系统版本大于或等于 8 的设备以及操作系统版本小于 8 的设备。

希望这对某人有帮助。

关于android - 如何将共享首选项从即时应用转移到完整应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54132152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com