2017-11-12 24 views
0

これはこれまでよりもはるかに簡単なはずです...しかし、私はURIからイメージのフルパスを取得しようとしています。MediaStoreがNULLを返す

String[] projection = { MediaStore.MediaColumns.DISPLAY_NAME}; 

は正しくファイルの名前が表示されますが:

String[] projection = { MediaStore.MediaColumns.DATA}; 

か...

String[] projection = { MediaStore.Images.Media.DATA}; 

...私だけNULLを与えるだろう。

多分私はあまりにも疲れていて、まっすぐ考えていないかもしれませんが(これははるかに大きなアプリケーションの非常に小さな部分です)、画像がはっきりしていればそれがどうなるかは分かりません。うまく動作し、表示名が機能します。私は何かが簡単に行方不明になっていると確信しています...私は現時点でそれを見ることはできません。

完全なコードは以下の通りです:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1 && resultCode == Activity.RESULT_OK) { 

     Uri selectedImageUri = null; 
     if (data != null) { 

      selectedImageUri = data.getData(); 
      String[] projection = { MediaStore.MediaColumns.DISPLAY_NAME}; 

      ContentResolver cr = this.getApplicationContext().getContentResolver(); 

      Cursor metaCursor = cr.query(selectedImageUri, 
        projection, null, null, null); 
      metaCursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 

      if (metaCursor != null) { 
       try { 
        if (metaCursor.moveToFirst()) { 
         imagepath = metaCursor.getString(0); 
         Log.i(TAG, "UriB: " + metaCursor.getString(0)); 
        } 
       } finally { 
        metaCursor.close(); 
       } 
      } 

      Log.i(TAG, "Uri: " + selectedImageUri.toString()); 

     } 





     try { 
      Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri)); 
      imageview.setImageBitmap(bitmap); 
      messageText.setText("Uploading file path: " + imagepath); 
     } catch (IOException ie) { 
      messageText.setText("Error"); 
     } 


    } 
} 

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.jon.bon" > 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE_EXTERNAL_STORAGE"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 


     <activity android:name=".MainActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".DisplayMessageActivity" > 
     </activity> 
    </application> 

私は今、約7それらのオープンを持っているので、この上のページがたくさんあるけど、私なぜ私が立ち往生しているのか分からない。

EDIT

私はEXTERNAL_CONTENT_URIを使用する必要がありますように見えます。私はこれを行うときには:

Cursor metaCursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); 

を...私は関係なく、私はで動作するようにしようと何をイメージいくつかの(実際には1つの非常に具体的な...よく)完全にランダムなパスを取得していません。それはまったく関連していないようです。

+1

アンドロイドの許可を処理しましたか? – muazhud

+0

@muazhudはい。外部読み書き用。あなたの投稿を更新しました –

+0

あなたの投稿を更新しました –

答えて

0

許可が有効な場合、以下のコードは 'Intent.ACTION_PICK'のために有効です。

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(intent, Constants.PICK_GALLERY); 

デバイス仕様を追加しない場合は、 OnActivity結果は以下のようになります。

if(responseCode == activity.RESULT_OK && requestCode==Constants.PICK_GALLERY){ 
     Uri selectedImage = data.getData(); 
     String[] filePath = {MediaStore.Images.Media.DATA}; 
     try { 
      Cursor c = activity.getContentResolver().query(selectedImage, filePath, null, null, null); 
      c.moveToFirst(); 
      int columnIndex = c.getColumnIndex(filePath[0]); 
      String picturePath = c.getString(columnIndex); 
      c.close(); 
      if(picturePath==null) { 
       picturePath=selectedImage.getPath(); 
      } 
      //Use picturePath for setting bitmap or to crop 
     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
+0

インテントのために "シンボル定数を解決できません"というエラーが発生しました –

+0

Constants.PICK_GALLERYはリクエストコードです。それ以外の正の整数を使用することができます – ADM

+0

うわー...私は本当に疲れていなければなりません!ハハハ!このプロジェクトを20時間まっすぐにやっています...少なくとも2人はこれに取り組んでいます。 –