概述:
在Android10系统日常开发中,截屏功能截屏后会出现一个通知,通知界面有分享、编辑和删除功能,
目前有需求要去掉这三个功能,而我们知道截图功能一直都是在SystemUI上面处理的,所以我们只能在SystemUI里面去找对应代码。
修改目录:
\vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\screenshot\GlobalScreenshot.java
因为我改的是MTK提供的源码,目录跟原生的有所不同。
修改内容如下:
@Override
protected Void doInBackground(Void... paramsUnused) {
if (isCancelled()) {
return null;
}
// By default, AsyncTask sets the worker thread to have background thread priority, so bump
// it back up so that we save a little quicker.
Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
Context context = mParams.context;
Bitmap image = mParams.image;
Resources r = context.getResources();
try {
// Save the screenshot to the MediaStore
final MediaStore.PendingParams params = new MediaStore.PendingParams(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, mImageFileName, "image/png");
params.setPrimaryDirectory(Environment.DIRECTORY_PICTURES);
params.setSecondaryDirectory(Environment.DIRECTORY_SCREENSHOTS);
final Uri uri = MediaStore.createPending(context, params);
final MediaStore.PendingSession session = MediaStore.openPending(context, uri);
try {
try (OutputStream out = session.openOutputStream()) {
if (!image.compress(Bitmap.CompressFormat.PNG, 100, out)) {
throw new IOException("Failed to compress");
}
}
session.publish();
} catch (Exception e) {
session.abandon();
throw e;
} finally {
IoUtils.closeQuietly(session);
}
// Note: Both the share and edit actions are proxied through ActionProxyReceiver in
// order to do some common work like dismissing the keyguard and sending
// closeSystemWindows
// Create a share intent, this will always go through the chooser activity first which
// should not trigger auto-enter PiP
String subjectDate = DateFormat.getDateTimeInstance().format(new Date(mImageTime));
String subject = String.format(SCREENSHOT_SHARE_SUBJECT_TEMPLATE, subjectDate);
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("image/png");
sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
// Include URI in ClipData also, so that grantPermission picks it up.
// We don't use setData here because some apps interpret this as "to:".
ClipData clipdata = new ClipData(new ClipDescription("content",
new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}),
new ClipData.Item(uri));
sharingIntent.setClipData(clipdata);
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
PendingIntent chooserAction = PendingIntent.getBroadcast(context, 0,
new Intent(context, GlobalScreenshot.TargetChosenReceiver.class),
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
Intent sharingChooserIntent = Intent.createChooser(sharingIntent, null,
chooserAction.getIntentSender())
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK)
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// Create a share action for the notification
PendingIntent shareAction = PendingIntent.getBroadcastAsUser(context, 0,
new Intent(context, GlobalScreenshot.ActionProxyReceiver.class)
.putExtra(EXTRA_ACTION_INTENT, sharingChooserIntent)
.putExtra(EXTRA_DISALLOW_ENTER_PIP, true),
PendingIntent.FLAG_CANCEL_CURRENT, UserHandle.SYSTEM);
//carHook
// Notification.Action.Builder shareActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_share,
// r.getString(com.android.internal.R.string.share), shareAction);
// mNotificationBuilder.addAction(shareActionBuilder.build());
// Create an edit intent, if a specific package is provided as the editor, then launch
// that directly
String editorPackage = context.getString(R.string.config_screenshotEditor);
Intent editIntent = new Intent(Intent.ACTION_EDIT);
if (!TextUtils.isEmpty(editorPackage)) {
editIntent.setComponent(ComponentName.unflattenFromString(editorPackage));
}
editIntent.setType("image/png");
editIntent.setData(uri);
editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
editIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Create a edit action
PendingIntent editAction = PendingIntent.getBroadcastAsUser(context, 1,
new Intent(context, GlobalScreenshot.ActionProxyReceiver.class)
.putExtra(EXTRA_ACTION_INTENT, editIntent)
.putExtra(EXTRA_CANCEL_NOTIFICATION, editIntent.getComponent() != null),
PendingIntent.FLAG_CANCEL_CURRENT, UserHandle.SYSTEM);
//carHook
// Notification.Action.Builder editActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_edit,
// r.getString(com.android.internal.R.string.screenshot_edit), editAction);
// mNotificationBuilder.addAction(editActionBuilder.build());
// Create a delete action for the notification
PendingIntent deleteAction = PendingIntent.getBroadcast(context, 0,
new Intent(context, GlobalScreenshot.DeleteScreenshotReceiver.class)
.putExtra(GlobalScreenshot.SCREENSHOT_URI_ID, uri.toString()),
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
//carHook
// Notification.Action.Builder deleteActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_delete,
// r.getString(com.android.internal.R.string.delete), deleteAction);
// mNotificationBuilder.addAction(deleteActionBuilder.build());
mParams.imageUri = uri;
mParams.image = null;
mParams.errorMsgResId = 0;
} catch (Exception e) {
// IOException/UnsupportedOperationException may be thrown if external storage is not
// mounted
Slog.e(TAG, "unable to save screenshot", e);
mParams.clearImage();
mParams.errorMsgResId = R.string.screenshot_failed_to_save_text;
}
// Recycle the bitmap data
if (image != null) {
image.recycle();
}
return null;
}
这个是去掉分享功能:
//carHook
// Notification.Action.Builder shareActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_share,
// r.getString(com.android.internal.R.string.share), shareAction);
// mNotificationBuilder.addAction(shareActionBuilder.build());
这个是去掉编辑功能:
//carHook
// Notification.Action.Builder editActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_edit,
// r.getString(com.android.internal.R.string.screenshot_edit), editAction);
// mNotificationBuilder.addAction(editActionBuilder.build());
这个是去掉删除功能:
//carHook
// Notification.Action.Builder deleteActionBuilder = new Notification.Action.Builder(
// R.drawable.ic_screenshot_delete,
// r.getString(com.android.internal.R.string.delete), deleteAction);
// mNotificationBuilder.addAction(deleteActionBuilder.build());