私はネイティブコードから適切な着信音を再生する必要があるアプリに取り組んできました。今まで私は私の問題の解決策を見つけられませんでした。着信音バイトをデコードして再生するための既知の方法はありますか?つまり、OpenSL ESですか?
私の現在の印象では、これらのファイルは一般に保護されており、アクセスするにはrootまたはその他の怪しげなメカニズムが必要です。これは正しいです?
前もって感謝します。
私は、この問題に対する有効な解決策を持っていParcelFileDescriptor
ます。これには、OpenSLES でネイティブに使用できる適切な FD を取得するために、1 つの JNI 呼び出しが含まれます。ParcelFileDescriptor
最後にFDを閉じてガベージコレクションを取得しないように保存することを覚えておく必要があります。
注: FD を取得するために必要なAPI レベルは 12 です。
注 2: できない場合はdetachFd()
、ネイティブ コードで FD を閉じる必要があり、参照を保持する必要はありません。
static public ParcelFileDescriptor getFileDescriptor(Context context) {
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
ContentResolver contentResolver = context.getContentResolver();
ParcelFileDescriptor openFileDescriptor;
try {
openFileDescriptor = contentResolver.openFileDescriptor(uri, "r");
} catch (FileNotFoundException e) {
return null;
}
return openFileDescriptor;
}