gpt4 book ai didi

java - 启动 Intent "silently"

转载 作者:IT老高 更新时间:2023-10-28 23:36:14 25 4
gpt4 key购买 nike

跟进 this问题,有没有办法在不提示用户任何操作的情况下在 android 中启动 Intent ?

现在,我正在检索这样的图像:

public void changeImage(View view) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, getResources().getString(R.string.select_picture)),
PICK_IMAGE);
}

然后我存储 Uri,并在必要时显示图像(我实际上是先调整它的大小,但这没关系):

Uri _uri = Uri.parse(_path);
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(_uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap b = BitmapFactory.decodeStream(imageStream);
iv.setImageBitmap(b);

我想通过“静默”调用 Intent 来检索给定其 Uri 的图像数据,以获得相关权限。所以我需要类似的东西:

编辑:

我尝试了 setPackage() 方法。此代码具有以下行为:

  • 如果使用 ACTION_VIEW Intent,则图库打开并显示特定图像。

  • 如果使用 ACTION_GET_CONTENT Intent,系统会提示我从图库中选择一张图片,即使我提供了特定的 Uri。

>

Uri _uri = Uri.parse(_path);
InputStream imageStream = null;
Bitmap b = null;
try {
imageStream = getContentResolver().openInputStream(_uri);
b = BitmapFactory.decodeStream(imageStream);
ImageView iv = (ImageView) findViewById(R.id.playerImage);
iv.setImageBitmap(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();

Intent dummyIntent = new Intent(Intent.ACTION_GET_CONTENT);
//Intent dummyIntent = new Intent(Intent.ACTION_VIEW);
dummyIntent.setDataAndType(_uri,"image/*");
dummyIntent.setPackage("com.google.android.gallery3d");

startActivityForResult(dummyIntent, PICK_IMAGE);
}

有什么想法吗?

最佳答案

您有不同类型的 Intent,无声的 Intent 是广播和服务 Intent。静默是指默认情况下用户看不到任何事情(不启动任何 Activity )。

Intent 只会询问系统:有什么东西能够处理它吗?如果有,它会将它传递给那个东西(或者在有多个选项的情况下会询问用户)。之后您将无法控制,除非处理它的是您的代码。

您的问题实际上出在 Picasa 上。

当用户从 Picasa 中挑选图片时,您会得到一个 Uri。您可以将该 Uri 与 ContentResolver 一起使用来获取图像。当您这样做时,实际发生的情况是 Picasa 的 ContentProvider 将处理 Uri 并向您返回图像的 InputStream。

从另一个问题我了解到,您不会立即获取图像,而是将 Uri 保存在数据库中并稍后处理它。

由于 Picasa 使用权限机制为您提供图像,并且当您尝试使用 Uri 时该权限已过期,因此您想再次从 Picasa 获取 Uri(连同权限),而无需再次询问用户。

问题在于 Picasa 控制着该权限,因此如果 Picasa 没有通过了解 Uri 向您提供获得许可的 Intent ,那么您无能为力。

在我看来,这甚至不是一个错误:当用户决定时,您有权访问该图像,您不会自动获得从 Picasa 访问每个图像的权限。通过知道其 Uri 来“静默”地为您提供访问每个 Picasa 图像的权限的服务只会让您在用户不知情的情况下从用户那里获取任何图像。这可能不是 Picasa 开发人员想要的。

我能给你的最好建议与你在另一个问题中得到的建议相同:当用户选择图像时立即获取并保存在本地,然后使用本地 Uri 访问图像。

关于java - 启动 Intent "silently",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503089/

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