bha*_*hik 3 media android android-contentresolver android-mediascanner
我正在开发一个应用程序,当用户通过任何方式(无论是下载还是传输)插入新图像、视频、音频或 apk 时,我必须立即通知用户,类似于文件管理器应用程序所做的.我不知道从哪里开始。谢谢
这是我的完整代码,用于在设备中添加新媒体(图像、音频或视频)时通知用户。它可能对某人有所帮助。此外,我会在添加新媒体后立即显示推送通知。
已编辑(已解决的问题如下)
1.仅在添加媒体时通知用户,而不是删除。
public class MediaTrackerService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// images
getContentResolver().registerContentObserver(
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Media media = readFromMediaStore(
getApplicationContext(),
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
File file = new File(media.file.getPath());
Date fileData = new Date(file.lastModified());
if (System.currentTimeMillis() - fileData.getTime() > 3000) {
} else {
if (!media.file.getPath().contains("WhatsApp")) {
String saved = media.file.getName();
// deduce bitmap before using
Bitmap bitmap = BitmapFactory
.decodeFile(media.file.getPath());
Intent intent = new Intent();
intent.setDataAndType(Uri.fromFile(media.file),
"image/*");
PendingIntent pendingIntent = PendingIntent
.getActivity(getApplicationContext(),
0, intent, 0);
Notification n = new Notification.Builder(
getApplicationContext())
.setStyle(
new Notification.BigPictureStyle()
.bigPicture(bitmap))
.setContentTitle(
"New Image File For You")
.setContentText("File Name :" + saved)
.setSmallIcon(R.drawable.alert_icon_1)
.setContentIntent(pendingIntent)
.setAutoCancel(true).build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, n);
}
}
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
}
});
// audio
getContentResolver().registerContentObserver(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Media media = readFromMediaStore(
getApplicationContext(),
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
File file = new File(media.file.getPath());
Date fileData = new Date(file.lastModified());
if (System.currentTimeMillis() - fileData.getTime() > 3000) {
} else {
if (!media.file.getPath().contains("WhatsApp")) {
String saved = media.file.getName();
Bitmap bitmap = BitmapFactory
.decodeFile(media.file.getPath());
Intent intent = new Intent();
intent.setDataAndType(Uri.fromFile(media.file),
"audio/*");
PendingIntent pendingIntent = PendingIntent
.getActivity(getApplicationContext(),
0, intent, 0);
Notification n = new Notification.Builder(
getApplicationContext())
.setStyle(
new Notification.BigPictureStyle()
.bigPicture(null))
.setContentTitle(
"New audio File For You")
.setContentText("File Name :" + saved)
.setSmallIcon(R.drawable.alert_icon_1)
.setContentIntent(pendingIntent)
.setAutoCancel(true).build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, n);
}
}
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
}
});
// video
getContentResolver().registerContentObserver(
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Media media = readFromMediaStore(
getApplicationContext(),
MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
File file = new File(media.file.getPath());
Date fileData = new Date(file.lastModified());
if (System.currentTimeMillis() - fileData.getTime() > 3000) {
} else {
if (!media.file.getPath().contains("WhatsApp")) {
String saved = media.file.getName();
Intent intent = new Intent();
intent.setDataAndType(Uri.fromFile(media.file),
"video/*");
PendingIntent pendingIntent = PendingIntent
.getActivity(getApplicationContext(),
0, intent, 0);
Notification n = new Notification.Builder(
getApplicationContext())
.setStyle(
new Notification.BigPictureStyle()
.bigPicture(null))
.setContentTitle(
"New Video File For You")
.setContentText("File Name :" + saved)
.setSmallIcon(R.drawable.alert_icon_1)
.setContentIntent(pendingIntent)
.setAutoCancel(true).build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, n);
}
}
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
System.out
.println("here is the service change EXTERNAL 1 params"
+ " " + uri);
}
});
return START_STICKY;
}
private Long readLastDateFromMediaStore(Context context, Uri uri) {
Cursor cursor = context.getContentResolver().query(uri, null, null,
null, "date_added DESC");
Long dateAdded = (long) -1;
if (cursor.moveToNext()) {
dateAdded = cursor.getLong(cursor
.getColumnIndexOrThrow(MediaColumns.DATE_ADDED));
}
cursor.close();
return dateAdded;
}
private Media readFromMediaStore(Context context, Uri uri) {
Cursor cursor = context.getContentResolver().query(uri, null, null,
null, "date_added DESC");
Media media = null;
if (cursor.moveToNext()) {
int dataColumn = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
String filePath = cursor.getString(dataColumn);
int mimeTypeColumn = cursor
.getColumnIndexOrThrow(MediaColumns.MIME_TYPE);
String mimeType = cursor.getString(mimeTypeColumn);
media = new Media(new File(filePath), mimeType);
}
cursor.close();
return media;
}
private class Media {
private File file;
private String type;
public Media(File file, String type) {
this.file = file;
this.type = type;
}
public String getType() {
return type;
}
public File getFile() {
return file;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记取消注册您的观察者onDestroy()。
getContentResolver().unregisterContentObserver(yourObserverObject);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |