2015-06-10 6 views
5

तो, दो प्रश्न हैं जो इस तरह हैं ( How to use getCropAndSetWallpaperIntent method in WallpaperManager? और How to use getCropAndSetWallpaperIntent? ), लेकिन उनमें से दोनों के लिए कोई जवाब नहीं है। एक उत्तर की उम्मीद में मैं यह पूछ रहा हूं - इस विधि को काम करने के लिए कैसे प्राप्त करें।कैसे काम करने के लिए CropAndSetWallpaperIntent (Uri imageUri) प्राप्त करने के लिए?

http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri) जो मेरे दिमाग में मदद नहीं करता है।

और यह

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) 

तो पता चलता है, दस्तावेज़ के अनुसार "छवि यूआरआई कि इरादे में स्थापित किया जाएगा। The एक सामग्री यूआरआई होना चाहिए और इसके प्रदाता को इसके प्रकार को "छवि/*" "

छवि को हल करना होगा। छवि .jpg प्रारूप में है। मैं कल इस पर समाधान ढूंढने जा रहा हूं। मुझे उम्मीद थी कि कोई व्यक्ति मेरे प्रश्न का उत्तर जानता है।

संपादित/अद्यतन 1: तो मैं यूरी को सामग्री उरी में बदलने में कामयाब रहा, मुझे विश्वास है। कि इस का उपयोग करते हुए किया था - https://stackoverflow.com/a/23223556/2727408

अब यह इस

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) का उपयोग कर जाँच करने की कोशिश की पता चलता है, यह शून्य लौट आए। अब मैं छवि के लिए है कि बदलने के तरीके/*

कोड अब तक इस तरह

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: मेरी नई यहां मुद्दा यह है के बारे में बनाया गया नया प्रश्न: How to change type to image/*

उत्तर

0

त्रुटि की तरह कहते हैं, यदि आप किसी सामग्री यूआरआई की जरूरत है। सामग्री यूआरआई आपको फ़ाइलों को अस्थायी पढ़ने और लिखने की अनुमतियों के साथ साझा करने की अनुमति देता है।

की जाँच करें: Get a Content URI from a File URI?

+0

आप अब तक धन्यवाद, मैं एक त्रुटि मिली और मैं अपने सवाल अपडेट किया गया। –

+0

आपको यह जवाब स्वीकार करना चाहिए और फिर एक नया प्रश्न खोलना चाहिए। यह उन लोगों की मदद करेगा जो आपके दूसरे प्रश्न का उत्तर ढूंढने के साथ-साथ आपके नए मुद्दे पर ध्यान दें। – 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; 
     } 
    } 
} 
संबंधित मुद्दे