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(本机方法)
我该如何修复这个运行时错误?
您的 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)
请注意,在这两种情况下都必须传递上下文。
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |