2016-06-28 5 views
2

のロードに失敗しましたアンドロイド暗黙の意思編集これは、デバイス上の画像編集アプリケーションを起動するための私の暗黙の意思で画像

public String getMimeType(Uri uri) { 
    String mimeType = null; 
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { 
     ContentResolver cr = getContentResolver(); 
     mimeType = cr.getType(uri); 
    } else { 
     String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri 
       .toString()); 
     mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
       fileExtension.toLowerCase()); 
    } 
    return mimeType; 
} 

いくつかのアプリのためには、ロードするとクラッシュする:

Sketch_Cameraのアプリケーションでは、目に見えないページだけが読み込まれ、アプリとのやり取りが無効になります。

アプリでは、AirBrushはアプリを読み込みますが、このメッセージ「画像を読み込めませんでした」でクラッシュします。

鉱山が16であるため、最小sdkバージョンに関連していますか? 私はこれを9の最小sdkバージョンでもテストしましたが、結果に変更はありません。

すべてのアプリを操作するために、このインテントに追加する必要があることはありますか?

私もputExtraを試みたし、それが解決しない:

.putExtra(Intent.ACTION_EDIT, myUri); 

私はデバイス上のいくつかのギャラリーのアプリをしましたし、それらのすべてが問題なくSketch_CameraAirBrushを起動します。

ここには何が起こっていますか?私はこの現象に苦しんで2日後にとても混乱しています。

+1

「myUri」の値は何ですか?実際のMIMEタイプの代わりに 'image/*'を使っているのはなぜですか(あなたの*コンテンツなので、MIMEタイプは何ですか?) – CommonsWare

+0

myUriはイメージファイル>> 'Uri.fromFile(myFile)'からのURIで、なぜ実際のMIMEタイプの代わりに 'image/*'を使うのですか?私はスタックからコードを選んだ。今あなたのガイドに基づいて質問を編集しました。しかし、私は同じ結果を得る。 – Eftekhari

+1

"myUriはイメージファイルのURIです" - このファイルはどこにありますか? 'Intent.FLAG_GRANT_READ_URI_PERMISSION'と' Intent.FLAG_GRANT_WRITE_URI_PERMISSION'は 'file''Uri'値に関係しないので、この場合は役に立たないでしょう。 – CommonsWare

答えて

2

これは、他のアプリは、この場所への権利を持っている、あるいはそのことを保証はありませんMediaStore.Images.Media.EXTERNAL_CONTENT_URI

を照会することにより、1つのメディアストアファイルのパスから作成されたファイルですアプリにはこの場所へのアクセス権があります。たとえば、画像はremovable storageにあります。さらに、the fileUri scheme is being banned for cross-app usage、とにかく。

contentUriを代わりに使用してください。たとえば、this sample appでは、私はビデオのためにMediaStoreを照会します。私自身の目的のために、両方の作品(例えば、サムネイルを取得するにはピカソの手、再生のためのVideoViewに手

videoUri= 
    ContentUris.withAppendedId(
     MediaStore.Video.Media.EXTERNAL_CONTENT_URI, row.getInt(row.getColumnIndex(MediaStore.Video.Media._ID))); 

このUri:特定のビデオに位置rowという名前Cursorを考えると、私はそれを経由してのためにUriを生成します)、サードパーティのアプリに渡すためのものです(再生の場合はACTION_VIEWなど)。

ベースUriを照会したもの(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)に変更する以外は、同じ基本コードが有効です。

また、Intentのフラグを削除してください。これらは、Intentが自分のContentProviderを指している場合にのみ使用されます。元のコードではなく、withAppendedId()から作成するUriとなります。

関連する問題