app/src/main/java/com/sinata/xqmuse/MainActivity.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/sinata/xqmuse/ThinkAudioService.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/sinata/xqmuse/network/Apis.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/sinata/xqmuse/ui/home/adapter/CardBannerAdapter.kt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_guide.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/fragment_home.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/item_banner.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/item_banner_card.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/java/com/sinata/xqmuse/MainActivity.kt
@@ -8,6 +8,7 @@ import android.provider.Settings import android.util.Log import android.view.View import android.view.WindowManager import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentPagerAdapter import cn.sinata.xldutils.gone @@ -394,7 +395,10 @@ val answer = SPUtils.instance().getString(Const.User.ANSWER) if (!answer.isNullOrEmpty()){ //已登录并且有答案 val reqAnswer = Gson().fromJson(answer, ReqAnswer::class.java) reqAnswer?.device = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID) reqAnswer?.device = Settings.Secure.getString( contentResolver, Settings.Secure.ANDROID_ID ) HttpManager.saveUserAnswers(reqAnswer).request(this,false,success = { _, _-> SPUtils.instance().put(Const.User.ANSWER,"").apply() Log.e(Const.Tag,"私人定制已保存") app/src/main/java/com/sinata/xqmuse/ThinkAudioService.kt
New file @@ -0,0 +1,89 @@ package com.sinata.xqmuse import android.app.NotificationChannel import android.app.NotificationManager import android.app.Service import android.content.Intent import android.media.AudioManager import android.media.MediaPlayer import android.os.Build import android.os.IBinder import android.os.PowerManager import androidx.core.app.NotificationCompat class ThinkAudioService:Service() { private var mediaPlayer: MediaPlayer? = null private var wakeLock: PowerManager.WakeLock? = null override fun onCreate() { super.onCreate() // 初始化 MediaPlayer // mediaPlayer = MediaPlayer.create(this, R.raw.audio_sample) mediaPlayer!!.isLooping = true // 初始化 WakeLock val powerManager = getSystemService(POWER_SERVICE) as PowerManager wakeLock = powerManager.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, "AudioService::WakeLock" ) } private val focusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange -> if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { mediaPlayer!!.pause() // 焦点丢失时暂停播放 } } private fun createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel( "audio_channel", "音频播放", NotificationManager.IMPORTANCE_LOW ) getSystemService(NotificationManager::class.java).createNotificationChannel(channel) } } override fun onBind(intent: Intent?): IBinder? { return null } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { // 创建通知渠道(Android 8.0+ 必须) createNotificationChannel() // 启动前台服务 val notification = NotificationCompat.Builder(this, "audio_channel") .setContentTitle("音频播放中") .setSmallIcon(R.mipmap.ic_launcher) .build() startForeground(1, notification) // 请求音频焦点 val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager val result = audioManager.requestAudioFocus( focusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN ) if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { mediaPlayer?.start() wakeLock?.acquire(30 * 60 * 1000L) // 申请 WakeLock } return START_STICKY } override fun onDestroy() { if (mediaPlayer != null) { mediaPlayer!!.release() mediaPlayer = null } if (wakeLock != null && wakeLock!!.isHeld) { wakeLock!!.release() } super.onDestroy() } } app/src/main/java/com/sinata/xqmuse/network/Apis.kt
@@ -5,7 +5,7 @@ // private const val TEST_URL = "http://192.168.110.64:9000/" //内网 private const val TEST_URL = "https://xq.xqzhihui.com/api/" //外网 private const val LINE_URL = "https://jkcyl.cn/app/" //正式服 private const val LINE_URL = "" //正式服 val BASE_URL = if (isTest) TEST_URL else LINE_URL /**公共接口*/ app/src/main/java/com/sinata/xqmuse/ui/home/VoiceDetailActivity.kt
@@ -150,6 +150,7 @@ } } EventBus.getDefault().register(this) iv_play.keepScreenOn = true } private fun startTimer(){ app/src/main/java/com/sinata/xqmuse/ui/home/adapter/CardBannerAdapter.kt
@@ -34,7 +34,7 @@ val bannerViewHolder = holder as BannerViewHolder bannerViewHolder.iv_bg.setImageURI(data?.coverUrl?.split(",")?.get(1)) bannerViewHolder.tv_title.text = data?.meditationTitle bannerViewHolder.tv_subtitle.text = data?.coverDescription?.ellipsize(6) bannerViewHolder.tv_subtitle.text = data?.coverDescription?.ellipsize(4) bannerViewHolder.tv_count.text = ((data?.realLearnedNum?:0)+(data?.virtualLearnedNum?:0)).toString() when(data?.chargeType){ //1=免费 2=会员免费 3=单独收费 2->{ app/src/main/res/layout/activity_guide.xml
@@ -8,7 +8,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:screenScaleType="type_center_crop" app:playerBackgroundColor="@color/colorPrimary" app:playerBackgroundColor="@color/white" android:id="@+id/player"/> <TextView app/src/main/res/layout/fragment_home.xml
@@ -126,7 +126,7 @@ android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="@id/iv_today" android:paddingVertical="8dp" android:textSize="11sp" android:textSize="14sp" android:textColor="@color/white" android:gravity="end" android:id="@+id/tv_today_count" @@ -141,7 +141,7 @@ app:layout_constraintBaseline_toBaselineOf="@id/tv_today_count" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="18dp" android:textSize="11sp" android:textSize="14sp" android:textColor="@color/white" /> app/src/main/res/layout/item_banner.xml
@@ -45,6 +45,6 @@ android:layout_marginBottom="16dp" app:layout_constraintStart_toStartOf="@id/tv_name" android:textColor="@color/white" android:textSize="10sp" android:textSize="14sp" android:textStyle="bold"/> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/item_banner_card.xml
@@ -34,7 +34,7 @@ android:text="缓解压力" android:singleLine="true" android:ellipsize="end" android:textSize="14sp" android:textSize="16sp" android:textColor="@color/white" android:id="@+id/tv_title"/> <TextView @@ -46,7 +46,7 @@ app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="11dp" android:text="缓解压力" android:textSize="9sp" android:textSize="11sp" android:textColor="@color/white" android:id="@+id/tv_subtitle"/> <ImageView @@ -63,7 +63,7 @@ android:layout_height="wrap_content" android:id="@+id/tv_count" android:textColor="@color/white" android:textSize="9sp" android:textSize="11sp" app:layout_constraintStart_toEndOf="@id/iv" app:layout_constraintBaseline_toBaselineOf="@id/tv_subtitle" android:layout_marginStart="2dp"