Java 音乐列表视图不适用于4.4或更高版本?

Java 音乐列表视图不适用于4.4或更高版本?,java,android,android-4.4-kitkat,Java,Android,Android 4.4 Kitkat,此代码在4.2及以下版本上运行正常,但在4.4或更高版本上运行不正常。它显示错误。不幸的是,应用程序已停止工作。我不知道原因。请帮助!因为我是android新手。这不是因为不推荐的方法吗?还是什么 下面是我的代码: package com.example.hamza; 导入android.app.Activity; 导入android.content.ContentResolver; 导入android.content.Context; 导入android.database.Cursor; 导

此代码在4.2及以下版本上运行正常,但在4.4或更高版本上运行不正常。它显示错误。不幸的是,应用程序已停止工作。我不知道原因。请帮助!因为我是android新手。这不是因为不推荐的方法吗?还是什么

下面是我的代码:

package com.example.hamza;
导入android.app.Activity;
导入android.content.ContentResolver;
导入android.content.Context;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.provider.MediaStore;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
列表视图lvfs;
光标游标FM;
整数计数,中间人;
TextView电视,标题;
内容解析器conres;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
初始化Mestuff();
}
私有无效初始值ESOMESTUFF(){
//TODO自动生成的方法存根
lvfs=(ListView)findViewById(R.id.lview);
findViewById(R.id.tv1);
String[]projection={MediaStore.Audio.Media.\u ID,MediaStore.Audio.Media.DISPLAY\u NAME,MediaStore.Audio.Media.ARTIST,};
cursorfm=conres.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection,null,null,null);
count=cursorfm.getCount();
////获取一些数据
setAdapter(新的musiclistadapter(getApplicationContext());
}
///////Cutomizion walla区域///开始
公共类musiclistadapter扩展BaseAdapter{
私有上下文;
弦乐歌曲名,歌手;
私人停车场平面布置;
公共音乐适配器(上下文应用程序上下文){
//TODO自动生成的构造函数存根
mcontext=应用上下文;
//找到布局充气机
mLayoutInflater=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回计数;
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
@凌驾
公共视图getView(内部位置、视图arg1、视图组arg2){
//TODO自动生成的方法存根
视窗座;
gc();
tv=新文本视图(mcontext.getApplicationContext());
字符串id=null;
//如果(arg1==null){
holder=新的ViewHolder();
arg1=mLayoutInflater.flate(R.layout.textviewlayout,arg2,false);
//从单元格中获取需要处理的所有视图,并将其保存在视图保持架中
holder.itemName=(TextView)arg1.findViewById(R.id.tv1);
//保存单元视图上的视图保持架,以便稍后将其取回
middleperson=cursorfm.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY\u NAME);
光标移动位置(位置);
id=cursorfm.getString(中间人);
middleperson=cursorfm.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
光标移动位置(位置);
id=id+cursorfm.getString(中间人);
arg1.设置标签(持有人);
holder.itemName.setText(id);
//middleperson=cursorfm.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
//id=cursorfm.getString(中间人);
//id+=“不管它是什么”+id+cursorfm.getString(中间人);
//LayoutInflater充气机=getLayoutInflater();
//查看行;
//行=充气机。充气(R.layout.textviewlayout,arg2,false);
//文本视图标题;
//title=(TextView)row.findViewById(R.id.tv1);
//title.setText(id);
//tv.setText(id);
//返回(行);
//  }
//否则{
//标题=(文本视图)arg1;
//getTag将viewHolder对象集作为标记返回给视图
holder=(ViewHolder)arg1.getTag();
//}
//如果(id!=null){
//在TextView上设置项目名称
//holder.itemName.setText(cursorfm.getString(中间人));
//}其他{
//确保当您有一个if语句来更改UI时,您总是有一个else语句来设置默认值,否则您会发现回收的项目将有相同的UI更改
//holder.itemName.setText(“未知”);
// }
//此方法必须返回与指定位置的数据对应的视图。
返回arg1;
//报税表(职称);
}   
}
私有类视窗持有者{
受保护的TextView项目名称;
}
}

正如我在您的日志跟踪中看到的,您没有提供读取外部存储的权限,因为您需要此权限才能从设备读取媒体数据。因此,您必须打开
manifest.xml
文件,并在
应用程序
标记之前添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />



关于在某些设备中工作而在其他设备中不工作,这是因为不同设备和android版本的媒体存储位置不同,因此音乐媒体数据存储在某些设备的外部存储中(因此您需要许可),而在其他设备中则不需要。

正如我在您的日志跟踪中看到的,您没有提供读取外部存储的权限,因为您需要此权限才能从设备读取媒体数据。因此,您必须打开
manifest.xml
文件,并在
应用程序
标记之前添加以下权限: