Browse Source

Workaround for android's new file scanning behaviour when using the device as a USB drive.

tags/2021-05-28
jules 13 years ago
parent
commit
edc45e9aba
4 changed files with 74 additions and 0 deletions
  1. +33
    -0
      extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java
  2. +33
    -0
      modules/juce_core/native/java/JuceAppActivity.java
  3. +1
    -0
      modules/juce_core/native/juce_android_JNIHelpers.h
  4. +7
    -0
      modules/juce_core/native/juce_posix_SharedCode.h

+ 33
- 0
extras/JuceDemo/Builds/Android/src/com/juce/JuceDemo.java View File

@@ -45,6 +45,8 @@ import java.net.URL;
import java.net.HttpURLConnection;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
//==============================================================================
public final class JuceDemo extends Activity
@@ -527,4 +529,35 @@ public final class JuceDemo extends Activity
return isRegion ? locale.getDisplayCountry (java.util.Locale.US)
: locale.getDisplayLanguage (java.util.Locale.US);
}
//==============================================================================
private final class SingleMediaScanner implements MediaScannerConnectionClient
{
public SingleMediaScanner (Context context, String filename)
{
file = filename;
msc = new MediaScannerConnection (context, this);
msc.connect();
}
@Override
public void onMediaScannerConnected()
{
msc.scanFile (file, null);
}
@Override
public void onScanCompleted (String path, Uri uri)
{
msc.disconnect();
}
private MediaScannerConnection msc;
private String file;
}
public final void scanFile (String filename)
{
new SingleMediaScanner (this, filename);
}
}

+ 33
- 0
modules/juce_core/native/java/JuceAppActivity.java View File

@@ -45,6 +45,8 @@ import java.net.URL;
import java.net.HttpURLConnection;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
//==============================================================================
public final class JuceAppActivity extends Activity
@@ -527,4 +529,35 @@ public final class JuceAppActivity extends Activity
return isRegion ? locale.getDisplayCountry (java.util.Locale.US)
: locale.getDisplayLanguage (java.util.Locale.US);
}
//==============================================================================
private final class SingleMediaScanner implements MediaScannerConnectionClient
{
public SingleMediaScanner (Context context, String filename)
{
file = filename;
msc = new MediaScannerConnection (context, this);
msc.connect();
}
@Override
public void onMediaScannerConnected()
{
msc.scanFile (file, null);
}
@Override
public void onScanCompleted (String path, Uri uri)
{
msc.disconnect();
}
private MediaScannerConnection msc;
private String file;
}
public final void scanFile (String filename)
{
new SingleMediaScanner (this, filename);
}
}

+ 1
- 0
modules/juce_core/native/juce_android_JNIHelpers.h View File

@@ -360,6 +360,7 @@ extern ThreadLocalJNIEnvHolder threadLocalJNIEnvHolder;
METHOD (showOkCancelBox, "showOkCancelBox", "(Ljava/lang/String;Ljava/lang/String;J)V") \
METHOD (showYesNoCancelBox, "showYesNoCancelBox", "(Ljava/lang/String;Ljava/lang/String;J)V") \
STATICMETHOD (getLocaleValue, "getLocaleValue", "(Z)Ljava/lang/String;") \
METHOD (scanFile, "scanFile", "(Ljava/lang/String;)V")
DECLARE_JNI_CLASS (JuceAppActivity, JUCE_ANDROID_ACTIVITY_CLASSPATH);
#undef JNI_CLASS_MEMBERS


+ 7
- 0
modules/juce_core/native/juce_posix_SharedCode.h View File

@@ -512,8 +512,15 @@ int FileOutputStream::writeInternal (const void* const data, const int numBytes)
void FileOutputStream::flushInternal()
{
if (fileHandle != 0)
{
if (fsync (getFD (fileHandle)) == -1)
status = getResultForErrno();
#if JUCE_ANDROID
const LocalRef<jstring> t (javaString (file.getFullPathName()));
android.activity.callVoidMethod (JuceAppActivity.scanFile, t.get());
#endif
}
}
Result FileOutputStream::truncate()


Loading…
Cancel
Save