首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getCropAndSetWallpaperIntent(Uri imageUri)如何工作?

getCropAndSetWallpaperIntent(Uri imageUri)如何工作?
EN

Stack Overflow用户
提问于 2015-06-10 02:43:21
回答 2查看 2.6K关注 0票数 6

因此,有两个问题与此相同( How to use getCropAndSetWallpaperIntent method in WallpaperManager?How to use getCropAndSetWallpaperIntent? ),但这两个问题都没有答案。为了得到一个答案,我要问的是--如何让这个方法起作用。

http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri),这对我的大脑没有帮助。

但这不起作用

代码语言:javascript
复制
WallpaperManager wallpaperManager = WallpaperManager.getInstance(MainActivity.this);
Uri uri = Uri.parse("android.resource://lv.revo.inspicfootballhd/drawable/v1");
Intent intent = new Intent(wallpaperManager.getCropAndSetWallpaperIntent(uri));
startActivity(intent);

logcat显示

代码语言:javascript
复制
5891-5891/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: lv.revo.inspicfootballhd, PID: 5891
    java.lang.IllegalArgumentException: Image URI must be of the content scheme type
            at android.app.WallpaperManager.getCropAndSetWallpaperIntent(WallpaperManager.java:760)
            at lv.revo.inspicfootballhd.MainActivity.onTouch(MainActivity.java:236)
            at android.view.View.dispatchTouchEvent(View.java:7701)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2338)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2465)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2285)
            at android.view.View.dispatchPointerEvent(View.java:7886)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:138)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:5144)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
            at dalvik.system.NativeStart.main(Native Method)

因此,根据文档“将在意图中设置的图像URI。必须是内容URI,其提供者必须将其类型解析为”image /*“。

图像采用.jpg格式。明天我会继续找出解决办法的。我只是希望一个更聪明的人知道我问题的答案。

编辑/更新1:,因此我设法将uri更改为内容Uri,我相信是这样的。用这个- https://stackoverflow.com/a/23223556/2727408做的

现在它显示了

代码语言:javascript
复制
java.lang.IllegalArgumentException: Cannot use passed URI to set wallpaper; check that the type returned by ContentProvider matches image/*
            at android.app.WallpaperManager.getCropAndSetWallpaperIntent(WallpaperManager.java:792)
            at lv.revo.inspicfootballhd.MainActivity.onTouch(MainActivity.java:244)

我尝试使用ContentResolver getType(contentURI)检查类型,它返回null。现在,我将尝试找到如何将其更改为图像/*。

到目前为止,代码如下所示

代码语言:javascript
复制
Uri uri = ResourceToUri(getApplicationContext(), imageArray[j]);
File wallpaper_file = new File(uri.getPath());
Uri contentURI = getImageContentUri(getApplicationContext(), wallpaper_file.getAbsolutePath());

ContentResolver cr = this.getContentResolver();
Log.d("CONTENT TYPE: ", "IS: " + cr.getType(contentURI));

Intent intent = new Intent(wallpaperManager.getCropAndSetWallpaperIntent(contentURI));
startActivity(intent);

到目前为止谢谢。

编辑/更新2:在这里创建了关于我的新一期的新问题:*

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 02:49:24

正如错误说明的那样,您需要一个内容URI。内容URI允许您共享具有临时读写权限的文件。

退房:Get a Content URI from a File URI?

票数 1
EN

Stack Overflow用户

发布于 2017-01-05 12:34:11

代码语言:javascript
复制
File wallpaper_file = new File(uri.getPath());
 Uri contentURI = getImageContentUri(getApplicationContext(),wallpaper_file);

 ContentResolver cr = this.getContentResolver();
 Log.d("CONTENT TYPE: ", "IS: " + cr.getType(contentURI));

 Intent intent = new Intent(wallpaperManager.getCropAndSetWallpaperIntent(contentURI));
startActivity(intent);

public static Uri getImageContentUri(Context context, File imageFile) {
    String filePath = imageFile.getAbsolutePath();
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            new String[]{MediaStore.Images.Media._ID},
            MediaStore.Images.Media.DATA + "=? ",
            new String[]{filePath}, null);

    if (cursor != null && cursor.moveToFirst()) {
        int id = cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID));
        Uri baseUri = Uri.parse("content://media/external/images/media");
        return Uri.withAppendedPath(baseUri, "" + id);
    } else {
        if (imageFile.exists()) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, filePath);
            return context.getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            return null;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30746196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档