Uzi maalumu kwa ajili ya kujifunza namna ya kutengeneza Android Apps

Tuendelee na Uundaji wa Applicaion yetu ya ku-play audio.
Kwenye apps ambazo tumeziunda hapo juu haziwezi kuacess audio ambazo zimeweza kuhifadhiwa kwenye memory(inernal na exernal), lakini pia kuna feutures ambazo hazipo kama next na previous button, kucontrol position ya audio na sauti, kwa hapa sitogusia ila nitaenda moja kwa moja kwenye kwenye kuacess audio zilizo ndani ya memory.

Class ambayo hutumika kwa ajili ya ku-access audio files ni
Code:
MediaStore
lakini pia inasaidiwa na class nyingingine inayosiana na database inaitwa
Code:
Cursor
ambayo kazi yake ni kusearch aina ya taarifa za file ambazo unazihitaji.

Kwenye app hii sitounda interface mwenyewe isipokuwa nitaandika codes ambazo zitatumia built-in application, ila unaweza ukaunda kama tulivyofanya awali.

Ifuatayo ni activity ambayo inafanya queries za ku-access audio file, ila hii app tunaenyosha basics kwanza maana kuna vitu ni muhimu kuvielewa.

Hatua ya kwanza ni ku-import classes ambazo tutatumia.
Code:
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
Baada ya hapo Tunaunda class yetu ya MainActivtivity au unaweza ipa jina lolote
Code:
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);
}
}
}

Kiujumla hapa kuna vitu vingi ila nimegusia vichache kwa hiyo ningeshauri uzame deep kuelewa zaidi.
 
AUDIO PLAYER APP ADDITIONAL FEATURES
Endapo umefata maelekezo ya apps ambazo tumeunda kuhusu audio utakuwa na basics ambazo zitakusaidia ku-intergrate audio file na app lakini sio kutengeneza audio android app iliyo kamili.

Kwa hiyo kwenye post hii nitatoa muongozo wa kutengeneza android application ambayo ina features za ziada na muhimu kama
  • Browse audio file
  • kuchagua audio file yoyote na ku-play
  • kuchagua album
Fuatilia hii post kwa makini ili uweze kutengeneza audio app ya android iliyo kamili, lets get started
listview3.PNG


AudioPlayer User Interface(UI)
Hatua ya kwanza utakayoanza nayo ni kutengeneza User Interface kwa ajili ya music app ambayo tayari tulishawahi elekezana kwenye post za nyuma.

Kwa kuwa application hii ina list audio zaidi ya moja hii ina maanisha nini? inamaanisha utatumia ListView class kupata muonekano kama wa hapo juu.

Swali ni kwamba tunaweka vp kwenye UI(User Interface)?

Ambacho unapaswa kufanya ni kuongeza codes zifuatazo kwenye xml file ya design kwa ajili ya kupata ListView.

Code:
    <ListView android:id="@+android:id/list" android:layout_width="wrap_content"

     android:layout_height="wrap_content">
</ListView>

Baada ya kuongeza code kwenye activity_main.xml ya audioplayer yetu muonekana wa awali utakuwa katika muundo wa image
ifuatayo.
listView.PNG

Tuanahitaji kuiboresha UI kwa hiyo tutaongeza codes kwenye sehemu ya ListView

Hivyo tunaweka mipaka kutoka item moja hadi item nyingine

Lakini pia itabidi uweke background color ya hii UI ya AudioPlayer App.

Sasa basi ongeza code ifuatayo kuboresha muonekano wa app ya ku-play mp3,m8u ama file lolote linalohusiana na audio.

Code:
android:divider="#ffcd12"
android:dividerHeight="2dp"

Baada ya kuongeza codes za hapo juu kwenye ListView, ListView inatakiwa iwe namna hii
Code:
<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>
listView2.PNG

Kutoka kwenye code hapo juu, divider ni nini?
divider iliyotumika hapa ina kazi ya kuipa rangi mstali unaotengenesha item moja hadi nyingine.

Rangi niliyotumia ni njano (#ffcd12) unaweza kuipa rangi yoyote unayoitaka.

dividerHeight ni nini?
Kama neno linavyojionyesha ni code ambayo ina kazi ya kuipa urefu(size) mipaka ya items ambazo zipo kwenye screen ya ListViews.

Baada ya kuongeza codes hakikisha unapata muoneka wa AudioApp ulio katika muundo nitakoweka punde,

Ukishindwa kupata muundo niliouweka hapa angalia tena codes zako ama uliza ulipokwama.

listview3.PNG


Hapa tumekamilisha hatua za mwanzo kwa hiyo tunahitaji kufuata hatua zingine za ziada na za msingi.

Hizi hatua nitakazoziposti hivi punde ndizo zina misingi kabisa wa kuweza kulist audios na majina yake kwenye screen kama unavyoona.

Tuendelee kuwa pamoja.
 
ROOT ANDROID 6.0 BILA PC

Wadau leo nimewaletea njia rahisi hii hapa ya namna ya kuroot simu sumbufu namaanisha Android 6.0+

Uzuri wa hii trick hata asiye na PC anaweza ilimradi simu iwe na charge ya kutosha

Sasa fungua link hiyo kuna kila maelekezo

Tech zone: Jinsi ya kuroot android 6.0,6.0.1 version bila PC
 
Jamani naomba msaada Ku unlock modem nimekosea codes mara 10 sasa inaandika 0 attempt je itawezekana kuiunlock? Kama inawezekana nifanyeje?

IMG_20181015_205644_811.JPG
 
Tatizo kubwa sikuwa najua ni code zipi nilitakiwa kuziingiza baada ya kuweka line ya mtandao mwingine na kuni command niingize sim lock

Screenshot_2018-10-14-18-34-53.jpeg
 
Babarazack,
Je hii modem ulikuwa unaifungulia kwa kutumia browser? Na ni huawei?

Kama ni hivyo kwanza modem inabidi uibadili kutoka webui ili com ports zionekane kwenye device manager.

Baada ya hapo tafuta firmware ya modem yako kulingana na model number.
 
AUDIO PLAYER APP ADDITIONAL FEATURES II​
Kwenye sehemu iliyopita tuliweza kutengeneza UI (User Interface) kwa kutumia class ya ListView ambayo hupatikana tu ukidrag.

Kwenye post hii tunaenda kuandika java code kwa ajili ya kupata na ku-play audi files yoyote ambayo ipo storage ya simu yako.

Kabla ya yote kuna kimoja cha muhimu sana ambacho unapaswa kuongeza kwenye manifest file.

Kitu hicho ni kuomba ruhusa permission ya ku-access mafile ya audio yaliyo ndani ya simu yako kwa kufanya yafuatayo, bila kufanya haya audio player app yako haitoweza kuplay.

  1. Kwenye android studio upande wa kushoto bonyeza sehemu iliyoandikwa app.
  2. Kisha bonyeza folder lilliloandikwa manifest.
  3. Bonyeza manifest file na kisha ongeza xml code ifuatayo.
  4. Code:
    <uses-permission name="android.permission.READ_EXTERNAL_STORAGE"/>
Sasa teyari tumeshaomba ruhusa ya kutumia mafile ya audio kutoka kwenye storage kitu kinachofuata ni kuandika java code kumbuka usisahau kuandika code niliyoweka hapo juu bila hivyo app haitofanya lolote.

Kutokana na urefu wa code nitaindika kwenye post inayofuata tuwe pamoja.
 
AUDIO PLAYER APP ADDITIONAL FEATURES II
Code yetu inaenda kuhusika kwenye kufanya yafuatayo, kwanza inabidi tuielekeze audio application yetu iombe permission endapo android smartphone itakuwa na restriction.

Pili tunaenda ku-declare database, ambapo hapa tutaimploy Cursor kwa sababu ndio huwa mara nyingi inatumika ku-query data kutoka kwenye storage.

kwa kutumia Cursor object tutaweza kupata index za kila columns halafu baadae itatupa string za aina ya taarifa tunayohitaji zinazohusiaba na audio,

Lakini ii uweze kuplay audio file pia utahitajika kutumia class ya MediaPlayer na bila kusahau MediaStore kwa ajili ya storage

na mambo mengine ambayo ambayo nitafafanua kwenye code.

1. import class zifuatazo, japo zingine zinakuwepo pindi ukitengeneza projects.
Code:
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;

Baada ni kuset muonekano wa awali pindi mtumiaji akifungua app ya audio.
Code:
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;

kama nilivyosema, tunaset muonekano wa awali wa app na pia tutaindika codes za kuomba permissions pindi tu mtumiaji akiifungua audio player tunayoitengeneza.
Code:
@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();
        }
    }

Code:
//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();
                   
                
            }
        });
    }

Hii ni method ambayo ina-access taarifa za file kwa kutumia cursor na kisha baada zinahifadhiwa kwenye ArrayList
Code:
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());
        }

    }
Vitu vya msingi tumeshamaliza, tunataka kucheki iwapo tutapata au hatutopata permission ya ku-access audio file ituletee meseji, hivyo method ya hapa chini inaweza fanya hilo.
Code:
@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();
                }
        }
    }
}

Tayari tumekamilisha audioplayer app yetu, unaweza kuongezea vitu kama icon launcher yako unayohitaji ambayo tuligusia kwenye post zilizopita.

Kama utakwama niulize, na kama hujaelewa baadhi ya sehemu unaweza fanya hivyo. vinginevyo tayari una basics ideas ya jinsi ya kuunda audio app, na unaweza ukasoma zaidi na kutengeneza complex audio app.

Application itakayofuata chatting application mfano wa whatsapp, iwapo utazama zaidi ya nitakachokitoa hapa utakuwa na uwezo wa kuunda whatsapp yako mwenyewe japo tunachoelekezana hapa sio complex kihivyo ila walau tunapata mwangaza jinsi vitu vinavyofanyika.

Tuonane Wakati ujao Mungu akijaalia.
 
Back
Top Bottom