AndroidQ(10.0) 自带音乐APP正在扫描中bug修改

简介: AndroidQ(10.0) 自带音乐APP正在扫描中bug修改

bug现象


进入音乐APP,点击艺术家Tab页中专辑项目下歌曲信息,自动跳转至正在扫描SD卡,一直卡在扫描界面,无法退出


UKHs4s.png


解决办法


对比 9.0 看了之前的效果是点击歌曲信息后就跳转至歌曲详情界面 TrackBrowserActivity,再点击条目就直接播放了


操作效果和从专辑Tab页中点击歌曲跳转流程一样,10.0 中专辑Tab页点击歌曲跳转也正常,那么解决思路就是我们在


艺术家Tab中点击时也跳到 TrackBrowserActivity 界面就好了,不去进行扫描操作。后来分析日志发现,一直在扫描是


因为数据库查不到对应的 albumId


vendor\mediatek\proprietary\packages\apps\Music\src\com\android\music\AlbumBrowserActivity.java


专辑 Tab 页 AlbumBrowserActivity 中条目点击事件

 @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
        intent.putExtra("album", Long.valueOf(id).toString());
        intent.putExtra("artist", mArtistId);
        android.util.Log.e("ccm","album="+Long.valueOf(id).toString());
        android.util.Log.e("ccm","artist="+mArtistId);
        startActivity(intent);
 }

对应歌曲专辑id为1,艺术家id为null

2020-07-10 16:55:38.753 3835-3835/com.android.music V/MusicBrowser: onPageSelected-position:1
2020-07-10 16:55:38.755 3835-3835/com.android.music V/MusicBrowser: onTabChanged-tabId:Album
2020-07-10 16:55:41.052 3835-3835/com.android.music E/ccm: album=1
2020-07-10 16:55:41.052 3835-3835/com.android.music E/ccm: artist=null
2020-07-10 16:55:41.075 3835-3835/com.android.music V/MusicBrowser: onPause
2020-07-10 16:55:41.075 3835-3835/com.android.music D/Album: onPause
2020-07-10 16:55:41.076 3835-3835/com.android.music D/Artist/Album: onPause
2020-07-10 16:55:41.131 3835-3835/com.android.music V/MusicUtils: bindToService: activity=com.android.music.TrackBrowserActivity@d626e0
2020-07-10 16:55:41.137 3835-3835/com.android.music V/TrackBrowser: setAlbumArtBackground: mAlbumId = 1, mAlbumArtBitmap = null
2020-07-10 16:55:41.138 3835-3884/com.android.music V/MusicUtils: >> getArtWork, song_id=-1, album_id=1
2020-07-10 16:55:41.139 3835-3835/com.android.music V/TrackBrowser: starting query
2020-07-10 16:55:41.152 3835-3835/com.android.music V/TrackBrowser: onResume>>>


vendor\mediatek\proprietary\packages\apps\Music\src\com\android\music\ArtistAlbumBrowserActivity.java


艺术家 Tab 页 ArtistAlbumBrowserActivity 中条目点击事件

 @Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        mCurrentAlbumId = Long.valueOf(id).toString();
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
        intent.putExtra("album", mCurrentAlbumId);
        Cursor c = (Cursor) getExpandableListAdapter().getChild(groupPosition, childPosition);
        String album = c.getString(c.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
        if (album == null || album.equals(MediaStore.UNKNOWN_STRING)) {
            // unknown album, so we should include the artist ID to limit
            //the songs to songs only by that artist
            mArtistCursor.moveToPosition(groupPosition);
            mCurrentArtistId = mArtistCursor.getString(
                    mArtistCursor.getColumnIndex(MediaStore.Audio.Artists._ID));
            intent.putExtra("artist", mCurrentArtistId);
        }
        android.util.Log.e("ccm","album11="+mCurrentArtistId);
        android.util.Log.e("ccm","artist11="+artistId);
        startActivity(intent);
        return true;
    }

同一首歌曲对应专辑id为16,艺术家id为1

2020-07-10 17:22:57.716 3413-3413/com.android.music V/MusicBrowser: Sdcard normal
2020-07-10 17:22:57.717 3413-3413/com.android.music V/MusicUtils: updateNowPlaying: activity = com.android.music.MusicBrowserActivity@c269a68, orientaiton = 2
2020-07-10 17:23:17.717 3413-3413/com.android.music E/ccm: album11=16
2020-07-10 17:23:17.717 3413-3413/com.android.music E/ccm: artist11=1
2020-07-10 17:23:17.736 3413-3413/com.android.music V/MusicBrowser: onPause
2020-07-10 17:23:17.737 3413-3413/com.android.music D/Artist/Album: onPause
2020-07-10 17:23:17.738 3413-3413/com.android.music D/Album: onPause
2020-07-10 17:23:17.792 3413-3413/com.android.music V/TrackBrowser: setAlbumArtBackground: mAlbumId = 16, mAlbumArtBitmap = null
2020-07-10 17:23:17.794 3413-3506/com.android.music V/MusicUtils: >> getArtWork, song_id=-1, album_id=16
2020-07-10 17:23:17.796 3413-3413/com.android.music V/TrackBrowser: starting query
2020-07-10 17:23:17.802 3413-3413/com.android.music V/TrackBrowser: onResume>>>


明明是同一首歌啊,为啥 albumId 不一样,那不行我得让它一样,明显是艺术家id 和专辑id 对调了。

修改后如下,只需保证 albumId 是正确的, artistId 为 null 就行

@Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        mCurrentAlbumId = Long.valueOf(id).toString();
        String artistId = null;
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
        //intent.putExtra("album", mCurrentAlbumId);//annotaion for artist id isn't correct
        Cursor c = (Cursor) getExpandableListAdapter().getChild(groupPosition, childPosition);
        String album = c.getString(c.getColumnIndex(MediaStore.Audio.Albums.ALBUM));
        if (true || album == null || album.equals(MediaStore.UNKNOWN_STRING)) {
            // unknown album, so we should include the artist ID to limit
            //the songs to songs only by that artist
            mArtistCursor.moveToPosition(groupPosition);
            mCurrentArtistId = mArtistCursor.getString(
                    mArtistCursor.getColumnIndex(MediaStore.Audio.Artists._ID));
            //intent.putExtra("artist", mCurrentArtistId);
            intent.putExtra("artist", artistId);
            intent.putExtra("album", mCurrentArtistId);
        }
        android.util.Log.e("ccm","album11="+mCurrentArtistId);
        android.util.Log.e("ccm","artist11="+artistId);
        startActivity(intent);
        return true;
    }


##########最新补充


当app为竖屏进入时,没有歌曲的情况下进去,还是会一直显示正在扫描sd 卡?


修正bug,因为竖屏和横屏布局文件确实不太一样。


vendor\mediatek\proprietary\packages\apps\Music\res\layout\media_picker_activity.xml

注释这个就行
<include layout="@layout/emptyfile" />


具体原因横屏时 scanView 为 null, 所以没bug

vendor\mediatek\proprietary\packages\apps\Music\src\com\android\music\MusicUtils.java

    /**
     *  M: when listview empty,show emptyview,and
     *  if when Sdcard is not ready,show scanning view.
     * @param list This listview will show emptyview.
     * @param a the Activity the view will be showed.
     */
    static void emptyShow(ListView list, Activity a) {
        if (list.getCount() == 0) {
            View scanView = a.findViewById(R.id.scan);
            if(scanView != null){
                scanView.setVisibility(View.VISIBLE);


目录
相关文章
|
1月前
|
物联网 Java API
Harmony Ble 蓝牙App (一)扫描(上)
Harmony Ble 蓝牙App (一)扫描(上)
183 0
|
1月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
362 0
|
4天前
|
JavaScript 小程序 程序员
黑马程序员uni-app 小兔鲜儿 项目及bug记录(下) Day 5(有作业)
黑马程序员uni-app 小兔鲜儿 项目及bug记录(下) Day 5(有作业)
13 5
|
4天前
|
小程序 JavaScript 前端开发
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(2)
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(2)
12 4
|
4天前
|
设计模式 JavaScript 小程序
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(1)
黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(1)
15 3
|
18天前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
|
1月前
|
Android开发 网络架构
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)
386 1
|
1月前
|
物联网 Android开发
Harmony Ble 蓝牙App (一)扫描(下)
Harmony Ble 蓝牙App (一)扫描(下)
|
1月前
|
物联网 Android开发
【Android App】低功耗蓝牙中扫描BLE设备的讲解及实战(附源码和演示 超详细)
【Android App】低功耗蓝牙中扫描BLE设备的讲解及实战(附源码和演示 超详细)
190 0
|
9月前
|
算法 数据安全/隐私保护
App逆向百例|17|某音乐App分析
App逆向百例|17|某音乐App分析
190 0

热门文章

最新文章