2015-06-10 9 views
5

Also, es gibt zwei Fragen, die die gleichen sind ( How to use getCropAndSetWallpaperIntent method in WallpaperManager? AND How to use getCropAndSetWallpaperIntent? ), aber es gibt keine Antworten auf beide von ihnen. In der Hoffnung auf eine Antwort frage ich das - wie man diese Methode zum Laufen bringt.Wie bekomme ich CopropAndSetWallpaperIntent (Uri imageUri) zu arbeiten?

http://developer.android.com/reference/android/app/WallpaperManager.html#getCropAndSetWallpaperIntent(android.net.Uri) das hilft meinem Gehirn nicht.

Und das nicht funktioniert,

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 zeigt diese

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, nach der Dokumentation „Das Bild URI, der in der Absicht festgelegt werden. Der muss ein Content-URI und sein Anbieter muss seinen Typ auf "image/*" auflösen. "

Das Bild ist im .jpg Format. Ich werde morgen noch eine Lösung finden. Ich hoffte nur, dass jemand klüger die Antwort auf meine Frage kennt.

BEARBEITEN/AKTUALISIEREN 1: Also habe ich es geschafft, uri zu Inhalt Uri zu ändern, glaube ich so. Hat, dass diese mit - https://stackoverflow.com/a/23223556/2727408

Jetzt ist es diese

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) 

zeigt Ich habe versucht, den Typ mit ContentResolver getType (contentURI) zu überprüfen, es zurückgegeben null. Jetzt werde ich versuchen zu finden, wie man das Bild ändern/*

Der Code so weit sieht wie folgen aus

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

Dank so weit.

EDIT/UPDATE 2: Erstellt neue Frage über mein neues Problem hier: How to change type to image/*

Antwort

0

Wie der Fehler sagt, benötigen Sie einen Inhalt URI. Mit Inhalts-URIs können Sie Dateien mit temporären Lese- und Schreibberechtigungen teilen.

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

+0

Thank you so weit, bekam ich noch einen Fehler und ich meine Frage aktualisiert. –

+0

Sie sollten diese Antwort akzeptieren und dann eine neue Frage öffnen. Es wird anderen helfen, die auf der Suche nach einer Antwort auf Ihre zweite Frage sind und die Aufmerksamkeit auf Ihr neues Problem lenken. – 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; 
     } 
    } 
} 
Verwandte Themen