현재 음악 플레이어에서 재생할 파일의 다운로드가 포함 된 코드바 테스트 프로젝트를 진행하고 있습니다. 기본적으로 응용 프로그램은 내 서버에서 .mp3 파일을 다운로드하고 응용 프로그램 저장소 또는 사용자 정의 경로 (폴더 선택)에 저장해야합니다. 현재 파일을 성공적으로 다운로드하고 있으며, 사용자 지정 경로를 선택하고 파일 탐색기 응용 프로그램에서 음악 파일을 재생할 수 있지만 어떻게 든 음악 플레이어 응용 프로그램이나 다른 곳에 나타나지 않습니다. 또한, 설정 파일에 외부 액세스를 정의한 경우에도 파일을 sdcard에 쓸 수 없습니다. 파일 시스템을 액세스 할 수 내 현재 코드처럼 보이는 다음Cordova : Android에서 sdcard 액세스가 작동하지 않습니다.
app.log('Filesystem', 'Requesting filesystem...');
\t \t if (device.platform.toLowerCase() == "android") {
\t \t \t app.log('Filesystem', 'Detected android device...');
\t \t \t if(window.saveInMusic && window.musicPath){
\t \t \t \t app.log('Filesystem', 'Selected storage persistent SD');
\t \t \t \t window.resolveLocalFileSystemURL(window.musicPath, app.gotFS, app.fsFail);
\t \t \t } else {
\t \t \t \t app.log('Filesystem', 'Selected storage persistent Internal');
\t \t \t \t window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, app.gotFS, app.fsFail);
\t \t \t }
\t \t } else {
\t \t \t app.log('Filesystem', 'No device detected...');
\t \t \t app.log('Filesystem', 'Selected storage DEFAULT (sandbox)');
\t \t \t window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, app.gotFS, app.fsFail);
\t \t }
이 모든 cordova.file.external * directorys이 (플러그인 md로 파일에 언급 된 것처럼) 널 (null)이며, externalRootDirectory가 "storage/emulated/0/appdir"을 반환합니다 (sdcard 경로를 반환해야 함). 나는 다음과 같이 config.xml에와의 AndroidManifest.xml에 권한을 확인했다 :
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.someorg.appname" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>AppName</name>
<description>
A basic Framework7 template for PhoneGap.
</description>
<author email="[email protected]" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<preference name="android-minSdkVersion" value="14" />
\t \t <preference name="AndroidPersistentFileLocation" value="Compatibility" />
\t \t <preference name="AndroidExtraFilesystems" value="sdcard,cache" />
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
<preference name="BackupWebStorage" value="none" />
</platform>
<preference name="DisallowOverscroll" value="true" />
<plugin name="cordova-plugin-whitelist" spec="~1.2.0" />
<plugin name="cordova-plugin-console" spec="~1.0.1" />
<plugin name="cordova-plugin-statusbar" spec="~1.0.1" />
\t <plugin name="cordova-plugin-compat" spec="~1.1.0" />
\t <plugin name="cordova-plugin-device" spec="~1.1.5" />
\t <plugin name="cordova-plugin-file" spec="~4.3.2" />
\t <plugin name="cordova-plugin-file-transfer" spec="~1.6.2" />
\t <plugin spec="https://github.com/ourcodeworld/cordova-ourcodeworld-filebrowser.git#96a57ef" source="git" />
</widget>
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="com.someorg.appname" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="Our Code World filepicker" android:name="com.ourcodeworld.plugins.filebrowser.DialogShowPicker">
<intent-filter>
<action android:name="com.ourcodeworld.plugins.filebrowser.DialogShowPicker" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:label="Filepicker" android:name="com.nononsenseapps.filepicker.FilePickerActivity" android:theme="@style/FilePickerTheme">
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
gotFS: function(fileSystem){
\t \t window.fileSystem = fileSystem;
\t \t app.log('Filesystem', 'Filesystem got!');
\t \t var entry = "";
\t \t if (device.platform.toLowerCase() == "android") {
\t \t \t entry = fileSystem;
\t \t } else {
\t \t \t entry = fileSystem.root;
\t \t }
\t \t app.log('Filesystem', 'Setting up directory...');
\t \t entry.getDirectory(window.appRootDirName, {
\t \t \t create: true,
\t \t \t exclusive: false
\t \t }, app.dirReady, app.fsFail);
\t },
업데이트 : 더 명확하게하기 위해, 응용 프로그램의 사용자는 자신이 사용하고 관리 앱 throught를을 열 수 없습니다로 다운로드 한 미디어 파일을 사용할 수 있어야합니다.
이 문제가 어떻게 해결되는지 잘 모르겠습니다. 문제는 다운로드 한 파일을 음악 플레이어와 같은 다른 응용 프로그램에서 샌드 박스처럼 인식하지 못하는 것입니다. 나는 에뮬레이트 된 대신에 영구적 인 위치를 얻기 위해 resolveFileSystem 대신에 resolveLocalFileSystemURL을 사용해야한다는 것을 읽었지만 이것도 작동하지 않았다. – user285814
@ user285814'opener2'는 에뮬레이트 된 위치를 영구적으로 변환합니다. 필자의 경우에는 시스템이'PDF's'와'MP3'을 올바르게 열었습니다. 당신이 원하는 것은'MIME TYPE'을 전달하는 것입니다. –
보세요 : https://github.com/pwlin/cordova-plugin-file-opener2 –