2015-06-10 9 views
5

Vì vậy, có hai câu hỏi giống như vậy ( How to use getCropAndSetWallpaperIntent method in WallpaperManager?How to use getCropAndSetWallpaperIntent? ), nhưng không có câu trả lời cho cả hai câu hỏi. Với hy vọng một câu trả lời tôi đang yêu cầu điều này - làm thế nào để có được phương pháp này để làm việc.Cách getCropAndSetWallpaperIntent (Uri imageUri) hoạt động?

http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri) không giúp não của tôi.

Và điều này không làm việc

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 lãm này

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) 

Vì vậy, theo tài liệu "Những hình ảnh URI mà sẽ được thiết lập trong mục đích. Phải là một nội dung URI và nhà cung cấp phải giải quyết loại của nó thành "hình ảnh/*" "

Hình ảnh ở định dạng .jpg. Tôi sẽ tiếp tục tìm một giải pháp cho ngày mai này. Tôi chỉ hy vọng rằng ai đó thông minh hơn sẽ biết câu trả lời cho câu hỏi của tôi.

EDIT/UPDATE 1: Vì vậy, tôi cố gắng thay đổi uri đến Nội dung Uri, tôi tin như vậy. Đã làm điều đó bằng này - https://stackoverflow.com/a/23223556/2727408

Bây giờ nó thấy điều này

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) 

Tôi cố gắng để kiểm tra các loại sử dụng ContentResolver getType (contentURI), nó trở null. Bây giờ tôi sẽ cố gắng tìm cách để thay đổi điều đó để hình ảnh/*

Mã này cho đến nay trông như thế này

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); 

Cảm ơn rất xa.

EDIT/UPDATE 2: Tạo câu hỏi mới về vấn đề mới của tôi ở đây: How to change type to image/*

Trả lời

0

Giống như lỗi nói, bạn cần một nội dung URI. URI nội dung cho phép bạn chia sẻ tệp với quyền đọc và ghi tạm thời.

Check-out: Get a Content URI from a File URI?

+0

Cảm ơn bạn cho đến nay, tôi đã nhận lỗi khác và tôi cập nhật câu hỏi của tôi. –

+0

Bạn nên chấp nhận câu trả lời này và mở một câu hỏi mới. Nó sẽ giúp những người khác tìm kiếm câu trả lời cho câu hỏi thứ 2 của bạn cũng như thu hút sự chú ý đến vấn đề mới của bạn. – Tushar

0
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; 
     } 
    } 
} 
Các vấn đề liên quan