- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究Music Player应用程序,因此我必须从存储卡中获取所有歌曲,然后从存储卡应用程序中成功获取歌曲,并在Lollipop上正常工作。
问题
棉花糖运行时权限我也为棉花糖添加了运行时权限,但应用仍然崩溃..
这是我的完整代码,请告诉我我必须在哪里编写棉花糖的运行时权限。
public class MainActivity extends AppCompatActivity {
private int STORAGE_PERMISSION_CODE = 23;
ListView musiclist;
Cursor musiccursor;
int music_column_index;
int count;
MediaPlayer mMediaPlayer;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init_phone_music_grid();
if(isReadStorageAllowed()){
//If permission is already having then showing the toast
Toast.makeText(MainActivity.this,"You already have the permission",Toast.LENGTH_LONG).show();
//Existing the method with return
return;
}
//If the app has not the permission then asking for the permission
requestStoragePermission();
}
private void requestStoragePermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_EXTERNAL_STORAGE)){
//If the user has denied the permission previously your code will come to this block
//Here you can explain why you need this permission
//Explain here why you need this permission
}
//And finally ask for the permission
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},STORAGE_PERMISSION_CODE);
}
//This method will be called when the user will tap on allow or deny
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//Checking the request code of our request
if(requestCode == STORAGE_PERMISSION_CODE){
//If permission is granted
if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
//Displaying a toast
Toast.makeText(this,"Permission granted now you can read the storage",Toast.LENGTH_LONG).show();
}else{
//Displaying another toast if permission is not granted
Toast.makeText(this,"Oops you just denied the permission",Toast.LENGTH_LONG).show();
}
}
}
private boolean isReadStorageAllowed() {
int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED)
return true;
return false;
}
private void init_phone_music_grid() {
System.gc();
String[] proj = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE };
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, null, null, null);
count = musiccursor.getCount();
musiclist = (ListView) findViewById(R.id.PhoneMusicList);
musiclist.setAdapter(new MusicAdapter(getApplicationContext()));
musiclist.setOnItemClickListener(musicgridlistener);
mMediaPlayer = new MediaPlayer();
}
private AdapterView.OnItemClickListener musicgridlistener = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position,
long id) {
System.gc();
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
musiccursor.moveToPosition(position);
String filename = musiccursor.getString(music_column_index);
try {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.reset();
}
mMediaPlayer.setDataSource(filename);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (Exception e) {
}
}
};
public class MusicAdapter extends BaseAdapter {
private Context mContext;
public MusicAdapter(Context c) {
mContext = c;
}
public int getCount() {
return count;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
System.gc();
TextView tv = new TextView(mContext.getApplicationContext());
String id = null;
if (convertView == null) {
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
musiccursor.moveToPosition(position);
id = musiccursor.getString(music_column_index);
music_column_index = musiccursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
musiccursor.moveToPosition(position);
id += " Size(KB):" + musiccursor.getString(music_column_index);
tv.setText(id);
} else
tv.setTextColor(Integer.parseInt(String.valueOf(R.color.colorAccent)));
tv = (TextView) convertView;
return tv;
}
}}
最佳答案
这是棉花糖及以上版本的示例代码:
public static class Utility {
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public static boolean checkPermission(final Context context) {
int currentAPIVersion = Build.VERSION.SDK_INT;
if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context, R.style.MyAlertDialogStyle);
alertBuilder.setCancelable(true);
alertBuilder.setTitle("Permission necessary");
alertBuilder.setMessage("External storage permission is necessary");
alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
});
AlertDialog alert = alertBuilder.create();
alert.show();
} else {
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
}
return false;
} else {
return true;
}
} else {
return true;
}
}
}
boolean result = Utility.checkPermission(MainActivity.this);
关于android - 棉花糖权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41359898/
我试图在接到电话后显示 toast,我已经实现了注册广播接收器所需的所有必要内容,但它没有显示 toast。我正在尝试在 Marshmallow 设备上运行此程序 MyCallReceiver.jav
我一直在搜索如何使用 Marshmallow 验证字典的键是否具有值(必需)并且该值的类型是 bytes ,但我没有找到任何可行的方法。 Marshmallow 引用文档中没有与 bytes 数据类型
我有一个 android 应用程序,它在生产环境中运行了几年。最近,我发现应用程序中的 ListView 存在问题,滚动时会变得模糊。该问题仅在 Android Marshmallow 下出现。 He
我想在模拟器中测试我的应用程序的可访问性(特别是 Talkback),但模拟器中似乎缺少该选项。这是模拟器在辅助功能设置中的屏幕截图: 有两个选项 "ClockBack" 和 "QueryBack"
我已经定义了一个需要数据的 POST 调用: { "one" : "hello", "two" : "world", "three" : { "
我想在第二个屏幕(POS)中打开另一个应用程序,所以请帮助我在第二个屏幕上运行另一个应用程序。我获得了 Oreo 的代码,但我需要它才能从 Lollipop 运行到最新版本。 ActivityOpti
我正在使用广播接收器来检测耳机按钮的点击。下面是广播接收器的代码。 public class HeadSetButtonStateReceiver extends BroadcastReceiver
场景如下,我有一个 LoginActivity,它使用 WifiManager 来获取 IP 地址,如下所示: WifiManager wifiManager = (WifiManager)getSy
我对棉花糖很陌生,但我的问题是关于处理类似字典的对象的问题。 Marshmallow 文档中没有可行的示例。我在堆栈溢出中遇到了一个简单的例子 Original question这是答案的原始代码假设
这个问题在这里已经有了答案: Return JSON response from Flask view (14 个回答) 去年关闭。 我在 Flask 上写申请.对于 RestAPI我在用 flask
Appium 支持 Marshmallow 吗?我正在尝试选择 Marshmallow 的平台名称,但它似乎不包含它,而且我安装了最新版本的 Appium...。 最佳答案 我没有将 6.0 Mars
我的带棉花糖的 Galaxy S6 Edge 手机遇到了一个非常有趣的问题。当我进入开发者选项时。我收到的不是一长串选项列表,而是“此用户无法使用开发人员选项”的消息。据我所知,我没有任何其他用户(老
我想声明一个模式字段来接受不同的模式类型,但不是任何 . Marshmallow 是否可能出现以下情况? class SchemaA(Schema): name = String() clas
又是我,现在有一个棉花糖问题,我有以下结构: 路线.py @models.response(ParentSchema()) def get(args, model_id): return {"
This question already has answers here: How do I create a transparent Activity on Android?
我正在为 Android Marshmallow(API 级别 23)开发一个应用程序。 我有一个包含 ListView 的 Activity 。 我使用 BaseView 适配器填充该 ListVi
我有一个通过 SSLSocket 与服务器通信的应用程序。从 Android 6 我收到一个 SSLHandshakeException javax.net.ssl.SSLHandshakeExcep
我有一个使用外部存储来存储照片的应用程序。根据需要,在其 list 中请求以下权限 它使用以下内容来检索所需的目录 File sdDir = Environment .ge
在 Android 6 中,低功耗蓝牙连接参数管理似乎发生了变化。 我有一个 BLE 外围设备需要使用一些特定的连接参数(特别是连接间隔),并且我想使用 BLE 规范允许的最小连接间隔(即 7.5ms
我有一个对象层次结构和一个对应于它们的模式层次结构。此层次结构的中间级别的架构不包括特定的继承字段。我希望从它继承的模式会“继承”这个排除,但如果他们在他们的 Meta 类中添加自己的排除字段,情况似
我是一名优秀的程序员,十分优秀!