相关疑难解决方法(0)

开始意图"默默地"

关注这个问题,有没有办法在没有提示用户任何东西的情况下启动android的意图?

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

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);
}
Run Code Online (Sandbox Code Playgroud)

然后我存储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);
Run Code Online (Sandbox Code Playgroud)

我想通过"默默地"调用意图来获取给定其Uri的图像数据,以获得相关权限.所以我需要这样的东西:

编辑:

我试过这个setPackage()方法.此代码具有以下行为:

  • 如果使用ACTION_VIEW意图,则会打开图库并显示特定图像.

  • 如果使用了ACTION_GET_CONTENT意图,即使我提供了特定的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); …
Run Code Online (Sandbox Code Playgroud)

java android android-intent

16
推荐指数
1
解决办法
1213
查看次数

如何将大文件或多个文件发送到其他应用程序,并知道何时删除它们?

背景

我有一个App-Manager应用程序,允许将APK文件发送到其他应用程序.

直到Android 4.4(包括),我必须为此任务执行的操作是将路径发送到原始APK文件(所有这些都在"/ data/app/..."下,即使没有root也可以访问).

这是发送文件的代码(此处提供的文档):

intent=new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("*/*");
final ArrayList<Uri> uris=new ArrayList<>();
for(...)
   uris.add(Uri.fromFile(new File(...)));
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
Run Code Online (Sandbox Code Playgroud)

问题

我做了什么工作,因为所有应用程序的APK文件都有一个唯一的名称(这是他们的包名称).

自从Lollipop(5.0)以来,所有应用程序的APK文件都被命名为"base.APK",这使得其他应用程序无法理解附加它们.

这意味着我有一些选项来发送APK文件.这就是我在想的:

  1. 将它们全部复制到一个文件夹,将它们全部重命名为唯一的名称,然后发送它们.

  2. 将它们全部压缩到一个文件然后发送它.压缩级别可能很小,因为APK文件已经被压缩了.

问题是我必须尽快发送文件,如果我真的必须拥有这些临时文件(除非有其他解决方案),也要尽快处理它们.

事实是,当第三方应用程序处理完临时文件时,我没有得到通知,我也认为选择多个文件需要花费一些时间来准备,无论我选择什么.

另一个问题是某些应用程序(如Gmail)实际上禁止发送APK文件.

这个问题

有没有我想到的解决方案的替代方案?有没有办法解决这个问题与我以前的所有优势(快速和没有垃圾文件留下)?

也许某种方式来监控文件?或创建一个流而不是一个真正的文件?

将临时文件放在缓存文件夹中会有什么帮助吗?

android file android-intent apk

13
推荐指数
1
解决办法
1829
查看次数

如何从URI加载Picasa图片?

我正在使用ACTION_PICK意图从图库中选择一个图像.一些专辑,如"帖子","个人资料照片"等,都标有Picasa图标.对于来自此类相册的图片,我得到一个类似于此的URI:

content://com.google.android.gallery3d.provider/picasa/item/5769844615871490082
Run Code Online (Sandbox Code Playgroud)

我可以使用ContentResolver并且BitmapFactory没有问题从这个URI加载图像:

final InputStream ist = context.getContentResolver().openInputStream(intent.getData());
final Bitmap bitmap = BitmapFactory.decodeStream(ist);
Run Code Online (Sandbox Code Playgroud)

但是在重新启动应用程序后,我无法使用存储的URI加载图像.我打电话的时候decodeStream()会得到这个:

03-11 12:34:56.502: A/libc(1172): Fatal signal 11 (SIGSEGV) at 0x00000408 (code=1), thread 1462 03-11 12:34:56.502:
    W/ActivityManager(478): Permission Denial: opening provider
    com.android.gallery3d.provider.GalleryProvider from
    ProcessRecord{41cdd220 1172:com.mycompany.myapp/u0a10085}
    (pid=1172, uid=10085) requires
    com.google.android.gallery3d.permission.GALLERY_PROVIDER or
    com.google.android.gallery3d.permission.GALLERY_PROVIDER
Run Code Online (Sandbox Code Playgroud)

我试着补充一下

<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/>
Run Code Online (Sandbox Code Playgroud)

清单文件,但它没有帮助.

我认为我的问题类似于这个,但没有解决方案,只有一个解决方法.是否可以请求访问存储的URI的权限?

android picasa android-intent android-contentresolver android-contentprovider

12
推荐指数
1
解决办法
3164
查看次数

无法使用ACTION_PICK意图选择特定图像

我正在使用这样的意图:

Intent intent = new Intent(Intent.ACTION_PICK,
        android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI);
Run Code Online (Sandbox Code Playgroud)

onActivityResult()我有这个:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode != Activity.RESULT_OK) {
        return; // user cancelled
    }

    Uri imageUri = data.getData();
    if (imageUri == null) {
        // (code to show error message goes here)
    return;
    }

    // Get image path from media store
    String[] filePathColumn = { android.provider.MediaStore.MediaColumns.DATA };
    Cursor cursor = this.getContentResolver().query(imageUri, filePathColumn,
            null, null, null);

    if (cursor == null || !cursor.moveToFirst()) { …
Run Code Online (Sandbox Code Playgroud)

android android-intent

2
推荐指数
1
解决办法
5667
查看次数