如何getCropAndSetWallpaperIntent(URI imageUri)工作? [英] How to getCropAndSetWallpaperIntent(Uri imageUri) to work?
问题描述
因此,有两个问题是相同的,因为这( <一href="http://stackoverflow.com/questions/23998177/how-to-use-getcropandsetwallpaperintent-method-in-wallpapermanager">How在WallpaperManager使用getCropAndSetWallpaperIntent方法?和如何使用getCropAndSetWallpaperIntent? ),但目前还没有答案,他们两个。在回答希望我问这 - 如何得到这个方法的工作
<一个href="http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri)" rel="nofollow">http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri)这并不能帮助我的脑子。
和这不起作用
WallpaperManager wallpaperManager = WallpaperManager.getInstance(MainActivity.this);
开放的我们的uri = Uri.parse(android.resource://lv.revo.inspicfootballhd/drawable/v1);
意向意图=新的意图(wallpaperManager.getCropAndSetWallpaperIntent(URI));
startActivity(意向);
logcat中显示了这种
5891-5891 /? E / AndroidRuntime:致命异常:主要
工艺:lv.revo.inspicfootballhd,PID:5891
java.lang.IllegalArgumentException:如果图像URI必须是内容计划类型
在android.app.WallpaperManager.getCropAndSetWallpaperIntent(WallpaperManager.java:760)
在lv.revo.inspicfootballhd.MainActivity.onTouch(MainActivity.java:236)
在android.view.View.dispatchTouchEvent(View.java:7701)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2338)
在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
在android.app.Activity.dispatchTouchEvent(Activity.java:2465)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2285)
在android.view.View.dispatchPointerEvent(View.java:7886)
在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947)
在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3442)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3411)
在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3518)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3419)
在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3575)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3442)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3411)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3419)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532)
在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512)
在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483)
在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612)
在android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
在android.os.MessageQueue.nativePollOnce(本机方法)
在android.os.MessageQueue.next(MessageQueue.java:138)
在android.os.Looper.loop(Looper.java:123)
在android.app.ActivityThread.main(ActivityThread.java:5144)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:795)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
在dalvik.system.NativeStart.main(本机方法)
因此,根据文献上的图像的URI将在意向进行设定,必须是一个内容URI和它的供应商必须解决其类型为image / *
图片为.jpg格式。我将继续寻找解决这一明天。我只是希望有人知道聪明的回答我的问题。
修改/更新1: 所以我设法改变URI以开放的内容,我相信如此。难道,使用此 - <一个href="http://stackoverflow.com/a/23223556/2727408">http://stackoverflow.com/a/23223556/2727408
现在它显示了这个
java.lang.IllegalArgumentException:如果不能用通过URI来设置的墙纸;检查由ContentProvider的返回类型相匹配的图像/ *
在android.app.WallpaperManager.getCropAndSetWallpaperIntent(WallpaperManager.java:792)
在lv.revo.inspicfootballhd.MainActivity.onTouch(MainActivity.java:244)
我尝试检查使用ContentResolver的的getType(contentURI)的类型,它返回null。现在,我将试图找到如何更改图像/ *
在code到目前为止看起来像这样
开放的URI = ResourceToUri(getApplicationContext(),imageArray [J]);
文件wallpaper_file =新的文件(uri.getPath());
乌里contentURI = getImageContentUri(getApplicationContext(),wallpaper_file.getAbsolutePath());
ContentResolver的CR = this.getContentResolver();
Log.d(内容类型:,是:+ cr.getType(contentURI));
意向意图=新的意图(wallpaperManager.getCropAndSetWallpaperIntent(contentURI));
startActivity(意向);
感谢这么远。</ P>
修改/更新2: 创建我的新问题,在这里新的问题: 如何改变类型为image / *
像错误说,你需要一个内容URI。内容的URI,您可以使用临时读取和写入权限共享文件。
So, there are two questions that are the same as this( How to use getCropAndSetWallpaperIntent method in WallpaperManager? AND How to use getCropAndSetWallpaperIntent? ), but there are no answers to both of them. In hope of an answer I'm asking this - how to get this method to work.
http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri) that doesn't help my brains.
And this doesn't work
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 shows this
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)
So, according to documentation "The image URI that will be set in the intent. The must be a content URI and its provider must resolve its type to "image/*""
The image is in .jpg format. I'm going to keep finding a solution to this tomorrow. I just hoped that someone smarter knows the answer to my question.
EDIT/UPDATE 1: So I managed to change uri to Content Uri, I believe so. Did that using this - http://stackoverflow.com/a/23223556/2727408
Now it shows this
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)
I tried to check the type using ContentResolver getType(contentURI), it returned null. Now I'll try to find how to change that to image/*
The code so far looks like this
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);
Thanks so far.
EDIT/UPDATE 2: Created new question about my new issue here: How to change type to image/*
Like the error says, you need a content URI. Content URIs allow you to share files with temporary read and write permissions.
Check out: Get a Content URI from a File URI?
这篇关于如何getCropAndSetWallpaperIntent(URI imageUri)工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!