Вы можете перевести символы подстановки в регулярное выражение:
*.txt -> ^.+\.txt$
POS??.dat _> ^POS..\.dat$
Используйте метод Regex.Escape
, чтобы экранировать символы, которые не являются символами подстановки, в буквенные строки для шаблона (например, преобразование ".txt"
в "\.txt"
).
Подстановочный знак *
переводится в .+
, а ?
переводится в .
Поставьте ^ в начале паттерна, чтобы соответствовать началу строки, и $ в конце чтобы соответствовать концу строки.
Теперь вы можете использовать метод Regex.IsMatch
, чтобы проверить, соответствует ли имя файла шаблону.
val intent = Intent(Intent.ACTION_EDIT, ContactsContract.Profile.CONTENT_URI)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
this.startActivity(intent)
В Android 28(Android P)
startActivity
if ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) == 0
&& (targetSdkVersion < Build.VERSION_CODES.N
|| targetSdkVersion >= Build.VERSION_CODES.P)
&& (options == null
|| ActivityOptions.fromBundle(options).getLaunchTaskId() == -1)) {
throw new AndroidRuntimeException(
"Calling startActivity() from outside of an Activity "
+ " context requires the FLAG_ACTIVITY_NEW_TASK flag."
+ " Is this really what you want?");
}
Так лучший способ, добавляют FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(context, XXXActivity.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);