web-dev-qa-db-ja.com

androidのres / rawフォルダーに保存されている.mp3ファイルのURIを取得します

Res/rawフォルダーに多くの.mp3ファイルが保存されています。

次のコードを使用して.mp3ファイルのURIを取得しています。

Uri.parse("Android.resource:///com.my.Android.sharesound/"+resId);

これは以下を返します:Android.resource:///com.my.Android.sharesound/2130968609

共有インテントの作成にこのURIを使用しています

    shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("Android.resource://com.my.Android.sharesound/"+resId));
    startActivity(Intent.createChooser(shareIntent,"Share Sound");

メールアプリケーションを選択した場合(例: Share IntentのGmailまたはYahooMail、mp3ファイルが正常に添付されました。ただし、2130968609(添付ファイルとして)

resourceId(2130968609)を表示したくありません。

FileName.mp3を表示したい

どうやってやるの?私は何かが欠けていますか?

OR

Res/rawに保存されている.mp3ファイルをShare Intent経由でメールに添付する他の方法はありますか。

52
Kartik Domadiya

最後に多くを検索した後、私は解決策を見つけました。

リソースURIを取得する場合、2つの方法があります。

  1. リソース名を使用する

    構文:_Android.resource://[package]/[res type]/[res name]_

    例:Uri.parse("Android.resource://com.my.package/drawable/icon");

  2. リソースIDの使用

    構文:_Android.resource://[package]/[resource_id]_

    例:Uri.parse("Android.resource://com.my.package/" + R.drawable.icon);

これは、描画可能フォルダーに保存されている画像ファイルのURIを取得する例です。

同様に、res/rawフォルダーのURIを取得できます。

私の場合、私は第一の方法を使用しました。リソース名を使用する

156
Kartik Domadiya

これは魔法のように機能します。mp3がrawフォルダーに次のように保存されていると仮定します。

notification_sound.mp3

次に、これを行う簡単な方法:

Uri uri=Uri.parse("Android.resource://"+getPackageName()+"/raw/notification_sound");
34
Andrew Sam

誰かを助けるかもしれないいくつかの方法はここにあります:

    public Uri getRawUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/raw/" + filename);
    }
    public Uri getDrawableUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/drawable/" + filename);
    }
    public Uri getMipmapUri(String filename) {
        return Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + File.pathSeparator + File.separator + getPackageName() + "/mipmap/" + filename);
    }

次のようにメソッドを呼び出すだけです:

Uri rawUri = getRawUri("myFile.filetype");
4
user9566632

1行の回答

RingtoneManager.getRingtone(getContext(),Uri.parse("Android.resource://com.my.package/" + R.raw.fileName)).play();
2
Radesh

ファイルをSDCardに保存してから、新しいURIを送信するか、

 public boolean saveAs(int resSoundId){
 byte[] buffer = null;
 InputStream fIn = getBaseContext().getResources().openRawResource(resSoundId);
 int size=0;

 try {
  size = fIn.available();
  buffer = new byte[size];
  fIn.read(buffer);
  fIn.close();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }

 String path = "/sdcard/yourapp/temp/";
 String filename = "filename"+".mp3";

 boolean exists = (new File(path)).exists();
 if (!exists){new File(path).mkdirs();}

 FileOutputStream save;
 try {
  save = new FileOutputStream(path+filename);
  save.write(buffer);
  save.flush();
  save.close();
 } catch (FileNotFoundException e) {
  // TODO Auto-generated catch block
  return false;
 } catch (IOException e) {
  // TODO Auto-generated catch block
  return false;
 }    

電子メールが正常に送信された後、必ずファイルを削除してください。

1
Reno

リソースを取得するクリーンな方法は次のとおりです。

 Uri.parse(String.format("Android.resource://%s/%s/%s",this.getPackageName(),"resource_folder_name","file_name"));
0
Remario

独自に文字列を作成しないで、Uri.Builderを使用します。

/**
 * @param resourceId identifies an application resource
 * @return the Uri by which the application resource is accessed
 */
internal fun Context.getResourceUri(@AnyRes resourceId: Int): Uri = Uri.Builder()
    .scheme(ContentResolver.SCHEME_Android_RESOURCE)
    .authority(packageName)
    .path(resourceId.toString())
    .build()

AOSP-DeskClockから。

0
Dewey Reed