Using MediaScanner to notify Android when a new file has been created on the system
This commit is contained in:
parent
f5a6258766
commit
0f00eb157d
4 changed files with 83 additions and 1 deletions
|
@ -111,6 +111,7 @@ import org.linphone.receivers.HookReceiver;
|
|||
import org.linphone.receivers.KeepAliveReceiver;
|
||||
import org.linphone.receivers.NetworkManager;
|
||||
import org.linphone.receivers.OutgoingCallReceiver;
|
||||
import org.linphone.ui.LinphoneMediaScanner;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
@ -210,6 +211,8 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
Log.e(mUserCertsPath+" can't be created.");
|
||||
}
|
||||
}
|
||||
|
||||
mMediaScanner = new LinphoneMediaScanner(c);
|
||||
}
|
||||
|
||||
private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL;
|
||||
|
@ -228,6 +231,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
private final String mUserCertsPath;
|
||||
private Timer mTimer;
|
||||
private Map<String, Integer> mUnreadChatsPerRoom;
|
||||
private LinphoneMediaScanner mMediaScanner;
|
||||
|
||||
private void routeAudioToSpeakerHelper(boolean speakerOn) {
|
||||
Log.w("Routing audio to " + (speakerOn ? "speaker" : "earpiece") + ", disabling bluetooth audio route");
|
||||
|
@ -998,11 +1002,16 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
public static synchronized void destroy() {
|
||||
if (instance == null) return;
|
||||
instance.changeStatusToOffline();
|
||||
instance.mMediaScanner.destroy();
|
||||
sExited = true;
|
||||
instance.destroyCore();
|
||||
instance = null;
|
||||
}
|
||||
|
||||
public LinphoneMediaScanner getMediaScanner() {
|
||||
return mMediaScanner;
|
||||
}
|
||||
|
||||
private String getString(int key) {
|
||||
return mR.getString(key);
|
||||
}
|
||||
|
|
|
@ -51,6 +51,8 @@ import org.linphone.core.AccountCreator;
|
|||
import org.linphone.core.Address;
|
||||
import org.linphone.core.Call;
|
||||
import org.linphone.core.Call.State;
|
||||
import org.linphone.core.ChatMessage;
|
||||
import org.linphone.core.Content;
|
||||
import org.linphone.core.Core;
|
||||
import org.linphone.core.Factory;
|
||||
import org.linphone.core.Friend;
|
||||
|
@ -62,6 +64,7 @@ import org.linphone.core.LoggingServiceListener;
|
|||
import org.linphone.core.ProxyConfig;
|
||||
import org.linphone.mediastream.Log;
|
||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||
import org.linphone.ui.LinphoneMediaScanner;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
|
@ -764,6 +767,7 @@ public final class LinphoneUtils {
|
|||
if (!file.isDirectory() || !file.exists()) {
|
||||
Log.w("Directory " + file + " doesn't seem to exists yet, let's create it");
|
||||
file.mkdirs();
|
||||
LinphoneManager.getInstance().getMediaScanner().scanFile(file);
|
||||
}
|
||||
return storageDir;
|
||||
}
|
||||
|
@ -776,5 +780,17 @@ public final class LinphoneUtils {
|
|||
}
|
||||
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
|
||||
public static void scanFile(ChatMessage message) {
|
||||
String appData = message.getAppdata();
|
||||
if (appData == null) {
|
||||
for (Content c : message.getContents()) {
|
||||
if (c.isFile()) {
|
||||
appData = c.getFilePath();
|
||||
}
|
||||
}
|
||||
}
|
||||
LinphoneManager.getInstance().getMediaScanner().scanFile(new File(appData));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,6 @@ import android.media.ExifInterface;
|
|||
import android.media.ThumbnailUtils;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.FileProvider;
|
||||
|
@ -527,6 +526,7 @@ public class ChatEventsAdapter extends SelectableAdapter<ChatBubbleViewHolder> {
|
|||
}
|
||||
|
||||
if (appData != null) {
|
||||
LinphoneUtils.scanFile(message);
|
||||
holder.fileName.setText(LinphoneUtils.getNameFromFilePath(appData));
|
||||
if (LinphoneUtils.isExtensionImage(appData)) {
|
||||
holder.messageImage.setVisibility(View.VISIBLE);
|
||||
|
|
57
src/android/org/linphone/ui/LinphoneMediaScanner.java
Normal file
57
src/android/org/linphone/ui/LinphoneMediaScanner.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
package org.linphone.ui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.MediaScannerConnection;
|
||||
import android.net.Uri;
|
||||
|
||||
import org.linphone.mediastream.Log;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class LinphoneMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
|
||||
private MediaScannerConnection mMediaConnection;
|
||||
private boolean mIsConnected;
|
||||
private File mFileWaitingForScan;
|
||||
|
||||
public LinphoneMediaScanner(Context context) {
|
||||
mIsConnected = false;
|
||||
mMediaConnection = new MediaScannerConnection(context, this);
|
||||
mMediaConnection.connect();
|
||||
mFileWaitingForScan = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaScannerConnected() {
|
||||
mIsConnected = true;
|
||||
Log.i("[MediaScanner] Connected");
|
||||
if (mFileWaitingForScan != null) {
|
||||
scanFile(mFileWaitingForScan);
|
||||
mFileWaitingForScan = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void scanFile(File file) {
|
||||
scanFile(file, null);
|
||||
}
|
||||
|
||||
public void scanFile(File file, String mime) {
|
||||
if (!mIsConnected) {
|
||||
Log.w("[MediaScanner] Not connected yet...");
|
||||
mFileWaitingForScan = file;
|
||||
return;
|
||||
}
|
||||
Log.i("[MediaScanner] Scanning file " + file.getAbsolutePath() + " with MIME " + mime);
|
||||
mMediaConnection.scanFile(file.getAbsolutePath(), mime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScanCompleted(String path, Uri uri) {
|
||||
Log.i("[MediaScanner] Scan completed : " + path + " => " + uri);
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
Log.i("[MediaScanner] Disconnecting");
|
||||
mMediaConnection.disconnect();
|
||||
mIsConnected = false;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue