Skopiowałem pliki z folderu prywatnego aplikacji do Pictures
lub DCIM
i chcę otworzyć widżet galerii w mojej aplikacji i wyświetlić te obrazy. Jednak mój widget galerii tworzy galerię miniatur wykorzystujących identyfikatory MediaStore, a nowo dodane obrazy nie pojawiają się tam.Czy można odświeżyć Media Store na Android Nougat?
Próbowałem wszystkich trzech rozwiązań sugerowanych na stackoverflow, aby odświeżyć sklep mediów i powiedzieć android o istnieniu nowych plików
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
- zakazanych w nowszych API
2.
MediaScannerConnection.scanFile(context,
new String[]{ pathToFile1, pathToFile2 },
null, // tried also with a String[] with the mimetype, no difference
new MediaScannerConnectionClient()
{
public void onMediaScannerConnected(){
}
public void onScanCompleted(String path, Uri uri){
// URI is null, and the gallery doesn't display the image
}
});
3.
public static void scanFile(Context context, String path, String mimeType) {
Client client = new Client(path, mimeType);
MediaScannerConnection connection =
new MediaScannerConnection(context, client);
client.connection = connection;
connection.connect();
}
private static final class Client implements MediaScannerConnectionClient {
private final String path;
private final String mimeType;
MediaScannerConnection connection;
public Client(String path, String mimeType) {
this.path = path;
this.mimeType = mimeType;
}
@Override
public void onMediaScannerConnected() {
connection.scanFile(path, mimeType);
}
@Override
public void onScanCompleted(String path, Uri uri) {
connection.disconnect();
}
}
Znowu uri jest null
Dlaczego Android sprawiają, że tak trudno jest wykonać taki normalny, legit działanie? Jak osiągnąć ten efekt w Nougat?
EDIT: Próbowałem też transmisję wysyłania dla ACTION_MEDIA_SCANNER_SCAN_FILE
I nawet wziął pod uwagę to: https://inthecheesefactory.com/blog/how-to-share-access-to-file-with-fileprovider-on-android-nougat/en
Więc teraz Im wysyłania content://
zamiast file://
URI, ale nadal nic!
EDIT2:
Próbowałem to
public static void scheduleJob(Context context) {
JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo job = new JobInfo.Builder(
MY_BACKGROUND_JOB,
new ComponentName(context, MyJobService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setRequiresCharging(true)
.build();
js.schedule(job);
}
jak wyjaśniono tutaj
https://developer.android.com/topic/performance/background-optimization.html
Ale znowu, gdy otwieram moją galerię nowy obraz nie jest