所以,有两个问题与此相同(如何在WallpaperManager中使用getCropAndSetWallpaperIntent方法?和如何使用getCropAndSetWallpaperIntent?),但是两个问题都没有回答。为了得到答案,我想问的是——如何让这个方法工作。
根据文档,“将设置在意图中的图像URI。必须是内容URI,其提供程序必须将其类型解析为“image / *””。
该图像以.jpg格式存在。我打算明天继续寻找解决方案。我只希望有更聪明的人知道我的问题的答案。
编辑/更新1: 所以我设法将URI更改为内容URI,我相信是这样做的。使用此代码- https://dev59.com/_n7aa4cB1Zd3GeqPwu-K#23223556 现在它显示如下。
我尝试使用ContentResolver getType(contentURI)检查类型,但返回了null。现在我会尝试找到如何将其更改为image/*。
到目前为止,代码看起来像这样:
这个不起作用。
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显示如下内容
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://dev59.com/_n7aa4cB1Zd3GeqPwu-K#23223556 现在它显示如下。
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。现在我会尝试找到如何将其更改为image/*。
到目前为止,代码看起来像这样:
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: 我创建了一个关于我的新问题的新问题,链接在这里: 如何将类型更改为image/*