Я разработал приложение проигрывателя Musi c, которое воспроизводит песни с реального мобильного устройства. Обычно все получают Qualcomm в качестве предупреждения. это не влияет на них. Но в моем случае я получил Qualcomm как ошибку. По этому мое приложение вылетает. Приложение запускается, но, когда я нажимаю любую кнопку, оно падает, и оно также не показывает список песен, присутствующих на моем реальном мобильном устройстве. Я ученик, пожалуйста, помогите мне.
ActivityMain. java
package com.example.rahul.musicdroid;
import android.Manifest;
import android.app.ListActivity;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MusicDroidActivity extends ListActivity {
private int mCurTime = 0;
private static final String MEDIA_PATH = "/sdcard/";
private List<String> mSongs = new ArrayList<String>();
private MediaPlayer mMediaPlayer = new MediaPlayer();
private int mSongIndex = 0;
private int mDuration = 0;
private ImageButton mPlay;
private ImageButton mPause;
private ImageButton mNext;
private ImageButton mPrevious;
private ImageButton mStop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPrevious = findViewById(R.id.ImageButton01);
mPlay = findViewById(R.id.ImageButton02);
mNext = findViewById(R.id.ImageButton04);
mPause = findViewById(R.id.ImageButton03);
mStop = findViewById(R.id.ImageButton05);
mPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
prevSong();
}
});
mPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playSong(mSongIndex, mCurTime);
}
});
mPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCurTime = getCurrentDuration(mSongIndex);
mMediaPlayer.pause();
}
});
mNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
nextSong();
}
});
mStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMediaPlayer.stop();
mMediaPlayer.reset();
mCurTime=0;
}
});
checkPermission();
}
public void checkPermission(){
Dexter.withActivity(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
updateSongList();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission,
PermissionToken token) {
token.continuePermissionRequest();
}
}).check();
}
public void onResume(){
super.onResume();
/* updateSongList();*/
ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.songlist, mSongs);
setListAdapter(songList);
}
public void updateSongList(){
File home = new File(MEDIA_PATH);
Log.i("home",home.toString());
//Log.i("home",home.listFiles().toString());
if (home.listFiles(new Mp3Filter()).length > 0){
Log.i("home","entered the if");
for (File file : home.listFiles(new Mp3Filter())){
mSongs.add(file.getName());
}
}
}
protected void onListItemClick(ListView l, View v, int position, long id)
{
playSong(position, 0);
}
public void nextSong(){
if (++mSongIndex >= mSongs.size())
mSongIndex = 0;
playSong(mSongIndex, 0);
}
public void prevSong(){
mSongIndex--;
if (mSongIndex > 0)
playSong(mSongIndex, 0);
else {
mSongIndex = 0;
playSong(mSongIndex,0);
}
}
public int getSongDuration(int index)
{
mDuration=mMediaPlayer.getDuration();
Log.v("Song Duration", String.valueOf(mDuration));
return mDuration;
}
public int getCurrentDuration(int index){
int current_position;
current_position=mMediaPlayer.getCurrentPosition();
Log.v("Current Dur:", String.valueOf(current_position));
return current_position;
}
class Mp3Filter implements FilenameFilter{
public boolean accept(File dir, String name) {
return (name.endsWith(".mp3") || name.endsWith(".MP3"));
}
}
public void playSong(final int position, final int cur_pos){
try{
mMediaPlayer.reset();
mMediaPlayer.setDataSource(MEDIA_PATH + mSongs.get(position));
mMediaPlayer.prepare();
mMediaPlayer.seekTo(cur_pos);
mMediaPlayer.start();
mDuration=position;
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
public void onCompletion(MediaPlayer arg0){
nextSong();
}
});
}catch (IOException e){
Log.v(getString(R.string.app_name), e.getMessage());
}
}
public void onStop(){
super.onStop();
mMediaPlayer.stop();
mMediaPlayer.release();
}
}
Main. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.rahul.musicdroid.MusicDroidActivity"
android:weightSum="1">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.30"
android:orientation="horizontal">
<ImageButton
android:id="@+id/ImageButton01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/Previous"
android:src="@drawable/previous" />
<ImageButton
android:id="@+id/ImageButton02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/Play"
android:src="@drawable/play" />
<ImageButton
android:id="@+id/ImageButton04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/Next"
android:src="@drawable/next" />
<ImageButton
android:id="@+id/ImageButton03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/Pause"
android:src="@drawable/pause" />
<ImageButton
android:id="@+id/ImageButton05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/Stop"
android:src="@drawable/stop" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/NoSong"/>
</LinearLayout>
</LinearLayout>
Songlist . xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
Ошибка Logcat
2020-01-28 15:52:08.532 31806-31806/? E/Zygote: v2
2020-01-28 15:52:08.532 31806-31806/? I/libpersona: KNOX_SDCARD checking this for 10347
2020-01-28 15:52:08.532 31806-31806/? I/libpersona: KNOX_SDCARD not a persona
2020-01-28 15:52:08.533 31806-31806/? E/Zygote: accessInfo : 0
2020-01-28 15:52:08.533 31806-31806/? W/SELinux: SELinux selinux_android_compute_policy_index :
Policy Index[2], Con:u:r:zygote:s0 RAM:SEPF_SECMOBILE_7.0_0010, [-1 -1 -1 -1 0 1]
2020-01-28 15:52:08.535 31806-31806/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted,
level=s0:c512,c768, pkgname=com.example.rahul.musicdroid
2020-01-28 15:52:08.539 31806-31806/? I/art: Late-enabling -Xcheck:jni
2020-01-28 15:52:08.562 31806-31813/? I/art: Ignoring second debugger -- accepting and dropping
2020-01-28 15:52:08.642 31806-31806/com.example.rahul.musicdroid I/MediaPlayer: Need to enable
context aware info
2020-01-28 15:52:08.701 31806-31806/com.example.rahul.musicdroid I/home: /storage/emulated/0
2020-01-28 15:52:08.717 31806-31813/com.example.rahul.musicdroid I/art: Ignoring second debugger --
accepting and dropping
2020-01-28 15:52:08.745 31806-31806/com.example.rahul.musicdroid W/Activity: AppLock
checkAppLockState locked:false verifying:false pkgName = com.example.rahul.musicdroid
isInMultiWindowMode:false
2020-01-28 15:52:08.767 31806-31821/com.example.rahul.musicdroid I/OpenGLRenderer: Initialized EGL,
version 1.4
2020-01-28 15:52:08.823 31806-31806/com.example.rahul.musicdroid I/InputMethodManager: [IMM]
startInputInner - mService.startInputOrWindowGainedFocus
2020-01-28 15:52:12.170 31806-31806/com.example.rahul.musicdroid E/BoostFramework: BoostFramework() :
Exception_1 = java.lang.ClassNotFoundException: Didn't find class "com.qualcomm.qti.Performance" on
path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
2020-01-28 15:52:12.227 31806-31806/com.example.rahul.musicdroid E/AndroidRuntime: FATAL EXCEPTION:
main
Process: com.example.rahul.musicdroid, PID: 31806
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.rahul.musicdroid.MusicDroidActivity.playSong(MusicDroidActivity.java:214)
at com.example.rahul.musicdroid.MusicDroidActivity$2.onClick(MusicDroidActivity.java:69)
at android.view.View.performClick(View.java:6261)
at android.view.View$PerformClick.run(View.java:23752)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)