from jnius import autoclass
from kivy.utils import platform
import time
if platform == "android":
# Импортируем необходимые Java классы
PythonActivity = autoclass('org.kivy.android.PythonActivity')
Uri = autoclass('android.net.Uri')
RingtoneManager = autoclass('android.media.RingtoneManager')
Settings = autoclass('android.provider.Settings')
System = autoclass('java.lang.System')
def check_and_request_permission():
current_api = int(Build.VERSION.SDK_INT) if 'Build' in globals() else 0
# Для Android 6.0+ нужен особый подход
if current_api >= 23:
# Проверяем, можем ли мы писать настройки
can_write = Settings.System.canWrite(PythonActivity.mActivity)
if not can_write:
# Если нет прав - открываем экран настроек нашего приложения
intent = autoclass('android.content.Intent')(
Settings.ACTION_MANAGE_WRITE_SETTINGS
)
data = Uri.parse("package:" + PythonActivity.mActivity.getPackageName())
intent.setData(data)
PythonActivity.mActivity.startActivity(intent)
return False
return True
def set_custom_ringtone(file_path):
try:
# Преобразуем строковый путь в объект java.io.File
File = autoclass('java.io.File')
file_obj = File(file_path)
# Получаем ContentResolver для работы с медиа
context = PythonActivity.mActivity.getApplicationContext()
content_resolver = context.getContentResolver()
# Вызываем системный метод установки мелодии
RingtoneManager.setActualDefaultRingtoneUri(
context,
RingtoneManager.TYPE_RINGTONE,
Uri.fromFile(file_obj)
)
time.sleep(5)
return True
except Exception as e:
print(f"Ошибка при смене рингтона: {e}")
return False
check_and_request_permission()
set_custom_ringtone("/storage/emulated/0/WhosePhoneIsRinging.m4a")