Я делаю пакетное переименование, и у меня есть функция для переименования, которую я вызываю в цикле for.когда я выбираю два файла, второй файл удаляется, а первый переименовывается (если я выбираю только 1 файл, он переименовывается должным образом), я не пытался выбрать более двух файлов. Переименование выполняется службой. Также правильно вызывать onDestroy внутриonStartCommand?я сделал это bcz сервис не останавливался после переименования
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val bundle: Bundle?=intent.extras
val pathss = bundle!!.getStringArray("path")
val namess = bundle!!.getStringArray("newname")
val resultt:MutableList<String> = mutableListOf()
val notifID = 595
val maxProgress = pathss.size
var currentProgress = 1
val inten = Intent(this, HobbiesActivity::class.java)
inten.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
val pendingIntent : PendingIntent = PendingIntent.getActivity(this,0,inten, 0)
val builderr = NotificationCompat.Builder(this, "Renamer")
.setSmallIcon(R.drawable.ic_stat_name)
.setContentTitle("Renaming " + pathss.size.toString() + " files")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setVisibility(1)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "ChannelMain"
val descText = "Renaming Progress"
val imp = NotificationManager.IMPORTANCE_HIGH
val channel = NotificationChannel("Renamer", name, imp).apply {
description = descText
enableVibration(true)
}
val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
Toast.makeText(this,"Renaming",Toast.LENGTH_SHORT).show()
startForeground(notifID,builderr.build())
with(NotificationManagerCompat.from(this)){
builderr.setProgress(maxProgress, currentProgress, false)
notify(notifID, builderr.build())
for(i in 0 until pathss.size)
{
if(renameTarget(pathss[i],namess[i])!=0)
{
resultt.add("Failed")
}
else
{
resultt.add("Success")
}
currentProgress = i+1
builderr.setContentTitle("Renaming " + currentProgress.toString() + " of " + pathss.size.toString())
builderr.setProgress(maxProgress,currentProgress,false)
notify(notifID,builderr.build())
}
stopForeground(true)
builderr.setContentTitle("Rename Complete")
.setContentText("Renamed " + maxProgress.toString() + " files")
.setProgress(0,0,false)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setSmallIcon(R.drawable.ic_stat_name)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
notify(notifID,builderr.build())
}
onDestroy()
return Service.START_STICKY
}
override fun onDestroy() {
super.onDestroy()
Toast.makeText(this,"Renaming completed",Toast.LENGTH_SHORT).show()
stopSelf()
}
}
Функция переименования
fun renameTarget(filePath:String, newName:String):Int{
val src= File(filePath)
var ext=""
val dest: File
if(src.isFile)
{
ext=filePath.substring(filePath.lastIndexOf("."),filePath.length)
}
if(newName.isEmpty())
{
return -1
}
val temp=filePath.substring(0,filePath.lastIndexOf("/"))
dest= File("$temp/$newName$ext")
return if(src.renameTo(dest)) {
0
} else {
1
}
}