2017-10-01 31 views
-1

我是製作音樂應用程序,並且我創建了一個從外部存儲器加載歌曲的功能。我給了棉花糖的運行時權限,但問題是,只要我授予許可歌曲不顯示。但是,當我停止應用程序並重新打開它時,我可以看到顯示的歌曲。我希望在給予運行時權限後立即顯示歌曲(從外部存儲器讀取)。謝謝!只要給出運行時權限,歌曲就不會立即顯示

Songs.java片段類:

public class Songs extends Fragment { 

private static final String TAG = "Songs"; 
RecyclerView recyclerView; 
private ArrayList<SongInfoModel> SongList = new ArrayList<SongInfoModel>(); 
SongAdapter songAdapter; 

SongInfoModel s; 

ScaleInAnimationAdapter alphaAdapter; 





    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
    container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.songs_activity, container, false); 


    recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView); 


    LinearLayoutManager linearLayoutManager = new 
    LinearLayoutManager(getContext()); 
    recyclerView.setLayoutManager(linearLayoutManager); 

    songAdapter = new SongAdapter(getContext(), SongList); 
    alphaAdapter = new ScaleInAnimationAdapter(songAdapter); 
    alphaAdapter.setDuration(1000); 
    alphaAdapter.setInterpolator(new OvershootInterpolator()); 
    alphaAdapter.setFirstOnly(false); 
    recyclerView.setAdapter(alphaAdapter); 




    Collections.sort(SongList, new Comparator<SongInfoModel>(){ 
     public int compare(SongInfoModel a, SongInfoModel b){ 
      return a.getSongName().compareTo(b.getSongName()); 
     } 
    }); 



loadSongs(); 


    return view; 
} 


public void loadSongs(){ 

    ContentResolver resolver = getActivity().getContentResolver(); 
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String selection = MediaStore.Audio.Media.IS_MUSIC+"!=0"; 
    Cursor cursor = resolver.query(uri,null,selection,null,null); 
    if(cursor != null){ 
     if(cursor.moveToFirst()){ 
      do{ 
       String name = cursor.getString(cursor.getColumnIndex 
            (MediaStore.Audio.Media.DISPLAY_NAME)); 
       String artist = cursor.getString(cursor.getColumnIndex 
             (MediaStore.Audio.Media.ARTIST)); 
       String url = cursor.getString(cursor.getColumnIndex 
             (MediaStore.Audio.Media.DATA)); 
       long duration = cursor.getLong(cursor.getColumnIndex 
             (MediaStore.Audio.Media.DURATION)); 
     s = new SongInfoModel(name,artist,null,null,url,duration,null); 
       SongList.add(s); 

      }while (cursor.moveToNext()); 
     } 

     cursor.close(); 
     songAdapter = new SongAdapter(getContext(),SongList); 

    } 

     private void checkUserPermission(){ 
     if(Build.VERSION.SDK_INT>=23){ 
      if(ActivityCompat.checkSelfPermission(getContext(), 
     Manifest.permission.READ_EXTERNAL_STORAGE) 
       != PackageManager.PERMISSION_GRANTED){ 
      requestPermissions(new String[] 
     {Manifest.permission.READ_EXTERNAL_STORAGE},123); 
      return; 
     } 
    } 
    loadSongs(); 
} 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
        permissions, @NonNull int[] grantResults) { 
    switch (requestCode){ 
     case 123: 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
       loadSongs(); 
      }else 
    Toast.makeText(getContext(), "Permission 
             Denied",Toast.LENGTH_SHORT).show(); 
       checkUserPermission(); 
      } 
      break; 
      default: 
      super.onRequestPermissionsResult(requestCode, permissions, 
                  grantResults); 

     } 

    } 


    } 
+0

顯示你的代碼你做了什麼 – UltimateDevil

+0

@Sebin保羅一旦授予權限,使用介質存儲和ContentResolver的把它拿來,我想這是正在做,請確保您通知我已經發布了RecyclerView/ListView的 –

+0

代碼,你會關心它,並告訴什麼是錯的:( –

回答

0

編輯答案編輯的問題

onCreateView方法,return語句之前,你叫loadSongs();取而代之的是,調用checkUserPermission();

舊回答

您還應通過在活動中覆蓋方法onRequestPermissionsResult來執行崗位權限授予任務。

您可以使用我的幫助程序庫來擺脫它。 https://github.com/nabinbhandari/Android-Permissions

+0

我已經發布代碼,你會關心它,並告訴什麼是錯的:( –

+0

@SebinPaul檢查編輯答案。 –

+0

已經嘗試過!但是,謝謝你的幫助。問題解決了! –

0

您必須重寫此方法才能對允許或拒絕的權限執行操作。

@Override 
public void onRequestPermissionsResult(int requestCode, 
    String permissions[], int[] grantResults) { 
switch (requestCode) { 
    case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
     // If request is cancelled, the result arrays are empty. 
     if (grantResults.length > 0 
      && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      // permission was granted, yay! Do the 
      // contacts-related task you need to do. 

     } else { 

      // permission denied, boo! Disable the 
      // functionality that depends on this permission. 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
} 
} 
+0

我已經發布的代碼,你會不會關心它,並告訴什麼是錯的:( –

相關問題