您的位置:首页 > 移动开发 > Android开发

android 通过URI获取文件名称Title

2016-06-15 23:35 471 查看
                  前一段时间项目中有需求:系统电话铃声需可以自定义Sdcard中的音乐文件,在高通平台上系统原生是不支持该功能,后来自己写代码将该功能实现了,

    但今天客户对该功能提出了新的需求,自定义电话铃声要支持Sdcard热插拔(即系统电话铃声设定为Sdcard中的音乐文件后,拔出Sdcard,电话铃声恢复为系统默认铃声,再插入Sdcard后电话铃声又可恢复为之前设置的Sdcard中的音乐),该功能弄了整整一下午算是实现了,但在代码过程中遇一个难点,无法通过设定为铃声的Uri路径获取该 URI路径文件的名称,抓头挠耳想了很久也没有任何进展,不得不换了另一种繁琐的方法来迂回实现,但另该方法终究还是不行,在后面的代码实现中通行性不强,这可把我给急了....

在系统源码中的Settings应用中NotificationSettings.java类中有一个updateRingtoneName方法,该方法在设置中就是通过返回的铃声URI路径来获取铃声文件名称的显示,现将其记录下来,以便他日用到:

    private static CharSequence updateRingtoneName(Context context, int type) {

        if (context == null) {

            Log.e(TAG, "Unable to update ringtone name, no context provided");

            return null;

        }

        Uri ringtoneUri = RingtoneManager.getActualDefaultRingtoneUri(context, type);

        CharSequence summary = context.getString(com.android.internal.R.string.ringtone_unknown);

        // Is it a silent ringtone?

        if (ringtoneUri == null) {

            summary = context.getString(com.android.internal.R.string.ringtone_silent);

        } else {

            Cursor cursor = null;

            try {

                if (MediaStore.AUTHORITY.equals(ringtoneUri.getAuthority())) {

                    // Fetch the ringtone title from the media provider

                    cursor = context.getContentResolver().query(ringtoneUri,

                            new String[] { MediaStore.Audio.Media.TITLE }, null, null, null);

                } else if (ContentResolver.SCHEME_CONTENT.equals(ringtoneUri.getScheme())) {

                    cursor = context.getContentResolver().query(ringtoneUri,

                            new String[] { OpenableColumns.DISPLAY_NAME }, null, null, null);

                }

                if (cursor != null) {

                    if (cursor.moveToFirst()) {

                        summary = cursor.getString(0);

                    }

                }

            } catch (SQLiteException sqle) {

                // Unknown title for the ringtone

            } catch (IllegalArgumentException iae) {

                // Some other error retrieving the column from the provider

            } finally {

                if (cursor != null) {

                    cursor.close();

                }

            }

        }

        return summary;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: