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;
    }

猜你喜欢

转载自blog.csdn.net/u012932409/article/details/107361199
今日推荐