ListView ImageButton 设置铃声

use*_*759 5 android listview imagebutton

我想做以下链接:http://imagizer.imageshack.us/v2/800x600q90/42/gbs4.jpg

但是当我按下 ImageButton 时,我希望将声音设置为铃声。

这是我的代码:

    公共类 ListViewAdapter 扩展 BaseAdapter {

        私有Context上下文;
        私人清单项目;
        私有 LayoutInflater 充气器;
        字符串路径=“SD卡/媒体/铃声”;

        公共ListViewAdapter(上下文上下文,
                               列出项目 ) {
            inflater = LayoutInflater.from( 上下文 );
            this.context = 上下文;
            this.items = 项目;
        }

        公共 int getCount() {
            返回 items.size();
        }

        公共对象 getItem(int 位置) {
            返回 items.get(位置);
        }

        公共长 getItemId(int 位置) {
            返回位置;
        }

        公共视图 getView(int 位置,视图 ConvertView,ViewGroup 父级){
            字符串 item = items.get(position);
            查看 v = null;
            if( 转换视图!= null )
                v = 转换视图;
            别的
                v = inflater.inflate( R.layout.list_row, 父级, false);
            TextView itemTV = (TextView)v.findViewById( R.id.itemText);
            itemTV.setText( 项目 );
            图像按钮按钮 =
                    (ImageButton)v.findViewById(R.id.button);
            按钮.setOnClickListener(
                    新的 View.OnClickListener() {
                        公共无效onClick(查看v){
                            Toast.makeText(上下文,
                                    “单击了图像按钮”,
                                    Toast.LENGTH_SHORT).show();

                            文件 k = new File(路径, "我的声音");

                            ContentValues 值 = new ContentValues();
                            value.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
                            value.put(MediaStore.MediaColumns.TITLE, "exampletitle");
                            value.put(MediaStore.MediaColumns.MIME_TYPE, "音频/mp3");
                            value.put(MediaStore.Audio.Media.ARTIST, "cssounds ");
                            value.put(MediaStore.Audio.Media.IS_RINGTONE, true);
                            value.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
                            value.put(MediaStore.Audio.Media.IS_ALARM, false);


                           value.put(MediaStore.Audio.Media.IS_MUSIC, false);

    //插入数据库
                           //插入数据库
                        Uri newUri= context.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), 值);

                        RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri);
                    });
            返回v;
        }
    }

这是我的 MainActivity 代码,没有错误:

    公共类 MainActivity 扩展 Activity {

        MediaPlayer mp = new MediaPlayer();
        按钮停止;
        ListViewAdapter 适配器;
        int s1[] =
                {
                        R.raw.el_tri_abuelita_soy_tu_nieto,
                        R.raw.el_tri_ahi_te_lo_lavas,
                        R.raw.el_tri_bajate_del_avion,

                };

        ImageButton imageButonMsj,imageButtonPhone;
        int 位置;

        @覆盖
        公共无效onCreate(捆绑保存实例状态){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            ListView list30 = (ListView) findViewById(R.id.list);

            ArrayList 项目 = new ArrayList();
            items.add("Abuelita soy tu nieto");
            items.add("Ahi te lo lavas");
            items.add("Bajate del avion");


            适配器 = new ListViewAdapter(this, items );
            list30.setAdapter(适配器);

            list30.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @覆盖
                公共无效onItemClick(AdapterView父级,视图视图,int位置,长id){
                    方法(位置);
                    }
                });
            Log.i("拉米罗", "llego al Final");
        }

     公共无效方法(int位置){
            if((mp.isPlaying()==true) && (this.position == 位置))
                mp.stop();
            别的{
                this.position = 位置;
                尝试{
                    mp.reset(); //重置媒体播放器
                    mp.release(); //释放当前正在播放音频的媒体播放器
                    mp=MediaPlayer.create(this,s1[位置]); //使用选定的id创建一个新的媒体播放器
                    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    //mp.prepare(); //萨尔塔异常
                    mp.seekTo(0); //寻找歌曲开始意味着时间=0毫秒
                    mp.start(); //启动媒体播放器
                }
                捕获(异常 e)
                {
                    Toast.makeText(getApplication(), "错误异常", Toast.LENGTH_SHORT).show();
                }
            }
        }

我进行了编辑,现在应用程序已编译,但是当我按下 ImageButton 时,应用程序发送了一条消息 -> 不幸的是,El Tri Sonidos 已停止。

    致命异常:主要
        java.lang.SecurityException:权限拒绝:从 pid=690、uid=10052 写入 com.android.providers.settings.SettingsProvider uri content://settings/system 需要 android.permission.WRITE_SETTINGS 或 grantUriPermission()
                在 android.os.Parcel.readException(Parcel.java:1425)
                在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
                在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
                在 android.content.ContentProviderProxy.insert(ContentProviderNative.java:420)
                在 android.content.ContentResolver.insert(ContentResolver.java:864)
                在 android.provider.Settings$NameValueTable.putString(Settings.java:665)
                在 android.provider.Settings$System.putString(Settings.java:862)
                在 android.media.RingtoneManager.setActualDefaultRingtoneUri(RingtoneManager.java:655)
                在 com.institutovilma.eltri.ListViewAdapterImageButton$1.onClick(ListViewAdapterImageButton.java:80)
                在 android.view.View.performClick(View.java:4084)
                在 android.view.View$PerformClick.run(View.java:16966)
                在 android.os.Handler.handleCallback(Handler.java:615)
                在 android.os.Handler.dispatchMessage(Handler.java:92)
                在 android.os.Looper.loop(Looper.java:137)
                在 android.app.ActivityThread.main(ActivityThread.java:4745)
                在 java.lang.reflect.Method.invokeNative(本机方法)
                在 java.lang.reflect.Method.invoke(Method.java:511)
                在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                在dalvik.system.NativeStart.main(本机方法)

我该如何修复这个运行时错误?

FD_*_*FD_ 2

您的 IDE 已经为您提供了正确的提示。更改您的越野车线路以匹配这些:

RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri);
Run Code Online (Sandbox Code Playgroud)

Uri newUri= context.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values);
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下都必须传递上下文。