Habari kuna changamoto na ubize unanikosesha muda wa kuwa humu mara kwa mara ila mpaka jumamosi Mungu akijaalia nitamalizia hii app ya audio na nitaweka maelezo.Mkuu huu uzi wetu pendwa tunaendeleanao lini.
Asante sana tunazisubiri hizo nondoHabari kuna changamoto na ubize unanikosesha muda wa kuwa humu mara kwa mara ila mpaka jumamosi Mungu akijaalia nitamalizia hii app ya audio na nitaweka maelezo.
MediaStore
Cursor
import java.io.File;
import android.app.Activity;
import android.content.Intent; //ku-access built-in app
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.provider.MediaStore;
//hapo tayari tumeshaweza ku-import classes zote ambazo zinahitajika
public class MainActivity extends Activity{
//tunainitialize interface kwa kutumia onCreate method
public void onCreate(Bundle savedInstance){
super.onCreate(savedInstance);
setContentView(R.layout.activity_main);
//Tunahitaji Kutumia MediaStore ku-access hizo audio za kwenye simu
//hivyo inatakiwa kuonyesha aina zipi za data ambazo tunazihitaji kwa hiyo tutaunda array ya strings ikionyesha constants
//zinazopatikana kwenye MediaStore class, yaani android.provider.MediaStore.Audio.Media
String[] columns={
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ID,
MediaStore.Audio.Media.MIME_TYPE,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.IS_RINGTONE,
MediaStore.Audio.Media.IS_ALARM,
MediaStore.Audio.Media.IS_MUSIC,
MediaStore.Audio.Media.IS_NOTIFICATION
};
/*unaweza ukachagua chache hapa nimejaribu kuziweka karibu zote,MediaStore.Audio.Media.DATA hii ndio ina link ya audio file mengineyo majina yanajionyesha wazi*/
//hatua inayofuata ni kutumia method ambayo ita-search hizo information ambazo tumetumia, method inayotumika ni //managedQuery kutoka kwenye class ya Cursor.
/*managedQuery inachukua Uri kutoka content provider hivyo tunakawa tuonyeshe data tunazotaka ni kutoka kwenye internal storage au external storage, kama ni internal "android.provider.MediaStore.Audio.Media.INTERNAL_CONTENT_URI" na external(SDCARD) "android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI"*/
Cursor cursor=managedQuery(android.provider.MediaStore.Audio.Media.INTERNAL_CONTENT_URI,columns,null,null,null);
//sehemu zilizowekwa null ni kwa ya SQL statements ambazo kwa sasa sizitumii.
//baada ya hapo nitatengeneza variables za kuhold baadhi ya columns nitakazotumia
int fileColumn=cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
int titleColumn=cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int displayColumn=cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME);
int mimeTypeColumn=cursor.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE);
//kisha tunatakiwa tuweke method ya ku-access kila data ambazo zipo kwenye column, data za MediaStore huwa //zinachukuriwa kwa mfumo wa row ili kumove kwenye row ya kwanza tutamia method inayoitwa moveToFirst
if(cursor.moveToFirst()){
//hizo variable zilikuwa zimehold columns namba sasa tunataka kupata data zenyewe zenye Uri za audio
//nitatumia method getString() kwa kuwa uri ni strings ingekuwa int tungetumia getInt() na kisha tuna-pass colum index //tunayoitaka.
String audioFilePath=cursor.getString(fileColumn);//path ya audio file
String MimeType=cursor.getString(mimeTypeColumn);//utambuzi wa aina ya file
//tunataka kuona paths za file za audio
Log.v("AUDIOYETUPATH",audioFilePath);
Log.v("MIMETYPE",MimeType);
/* kwa kuwa tayari tuna path na mime ya audi maana yake sasa tunaweza kuweka code zitakazolaunch built-in app na kuplay audio file au unaweza tengeneza interface yako mwenyewe na kufuata hatua za app iliyopita*/
Intent intent=new Intent(android.content.Intent.ACTION_VIEW);
File file=new File(audioFilePath);
intent.setDataAndType(Uri.fromFile(file),MimeType);
}
}
}
Nitaendelea soonest nadhani jumanne si unajua maisha, najaribu kuiongezea functions app ya mziki.Endelea ndugu wengine tunajifunza kwako.Thread nzuri hii,safi kabisa.
<ListView android:id="@+android:id/list" android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
android:divider="#ffcd12"
android:dividerHeight="2dp"
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#ffcd12"
android:dividerHeight="2dp"
android:background="#d5c4c4">
</ListView>
<uses-permission name="android.permission.READ_EXTERNAL_STORAGE"/>
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity{
//container tutakayoitumia kuhifadhi data tutakazokipata kutoka kwenye audio file
ArrayList<String> myarraylist;
//ArrayAdapter inahusika na kuchukua kutoka kwenye arrayList na kisha kuziweka kwenye ListViews
ArrayAdapter<String> adapter;
//Listview ndio muonekano wa kwenye screen yetu, itachukua data toka ArrayAdapter na kuziweka kwenye screen ya simu.
ListView mylistVies;
String AudioLink;
Cursor audioCursor;
public static final int REQUEST_PERMISSION=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Hapa tunacheki iwapo device haikutoa ruhusa ya ku-access storage ya simu
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
//Hapa tunachecki iwapo device inatoa uwanda wa kuomba tunachohitaji ku-access if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.READ_EXTERNAL_STORAGE))
{
//hapa tunaomba tunachokihitaji ku-acess ambacho ni storage.
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_PERMISSION );
}else{
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},REQUEST_PERMISSION );
}
}else{
//so iwapo kila kitu kipo sawa, inafanya majukumu yaliyoelekezwa kwenye hii method
readAudioFiles();
}
}
//hii ni method ya kukuwezesha ku-play file utakalochagua toka kwenye list, classes za hapa nimeelezea mwanzoni
public void readAudioFiles(){
mylistVies=(ListView)findViewById(R.id.listView);
myarraylist=new ArrayList<>();
getAudioFilesData();
adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,myarraylist);
mylistVies.setAdapter(adapter);
mylistVies.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MediaPlayer media=new MediaPlayer();
int positionn=position;
AudioLink=mylistVies.getItemAtPosition(positionn).toString();
Uri uri=Uri.parse(AudioLink);
media.setAudioStreamType(AudioManager.STREAM_MUSIC);
media=MediaPlayer.create(getApplicationContext(),uri);
media.start();
}
});
}
public void getAudioFilesData(){
ContentResolver audioContentResolver=getContentResolver();
Uri audioUri=MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
audioCursor=audioContentResolver.query(audioUri,null,null,null,null);
if(audioCursor!=null && audioCursor.moveToFirst()){
int AudioTitles=audioCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int AudioMusician=audioCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int Links=audioCursor.getColumnIndex(MediaStore.Audio.Media.DATA);
do {
String currenTitle=audioCursor.getString(AudioTitles);
String currenMusician=audioCursor.getString(AudioMusician);
AudioLink=audioCursor.getString(Links);
myarraylist.add(currenTitle+"\n"+currenMusician+"\n"+AudioLink);
}while (audioCursor.moveToNext());
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case REQUEST_PERMISSION:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
getAudioFilesData();
Toast.makeText(this,"Permission",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"not permitted",Toast.LENGTH_LONG).show();
}
}
}
}
I'm preparing it.Mkuu tunasubiri chatting application kama ya WhatsApp.