如何getCropAndSetWallpaperIntent(URI imageUri)工作? [英] How to getCropAndSetWallpaperIntent(Uri imageUri) to work?

查看:489
本文介绍了如何getCropAndSetWallpaperIntent(URI imageUri)工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此​​,有两个问题是相同的,因为这( <一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(co​​ntentURI));
startActivity(意向);
 

感谢这么远。<​​/ P>

修改/更新2: 创建我的新问题,在这里新的问题: 如何改变类型为image / *

解决方案

像错误说,你需要一个内容URI。内容的URI,您可以使用临时读取和写入权限共享文件。

退房:从文件URI获取一个内容URI <? / A>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆