рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдореВрд▓ рдХреЛрдб рдкреНрд░рдЧрддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреНрд╕ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореБрдЭреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдореВрд▓ рдХреЛрдб (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреЛрд░реНрдЯ рдХрд┐рдП рдЧрдП FFmpeg) рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рднреА рдЬрдЯрд┐рд▓ рдереА рдХрд┐ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХреЛрдб рдХреЛ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред





рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереЗ:



рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдерд╛ - рдирд╛рдорд┐рдд рдкрд╛рдЗрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдпреВрдирд┐рдХреНрд╕-рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЙрдкрдХрд░рдг (рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣рд╛рдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╛рд▓рд╛ рдПрдХ рддрд░рдлрд╝рд╛ FIFO рдЪреИрдирд▓ рд╣реИред рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЗрд╕реЗ рддрдм рддрдХ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЦреЛрд▓рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЬрдм рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЪреИрдирд▓ рдлрд┐рд░ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд▓рд┐рдЦрддреА рд╣реИред рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдкрд╛рдЗрдк рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреА рд╣реИрдВред



рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд╣рд┐рдд рд╣реИред рдпрд╣ рдПрдХ рд╕реЗрд╡рд╛ рдЪрд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдХреЛрдб рд╕реЗ рдкрд╛рдЗрдк рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдкрд╛рдардХ рдзрд╛рдЧрд╛ рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред



рд╕реНрдЯреНрд░реАрдо-рдкрд╛рдардХ ред Mffifo рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкрд╛рдЗрдк рдмрдирд╛рддрд╛ рд╣реИ (рдпрд╣ рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡рд░рдг рд╣реИ) рдФрд░ рдЗрд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рддрдХ рдкрд╛рдЗрдк рдХреЗ рджреВрд╕рд░реА рддрд░рдл рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддрдм рддрдХ рдХреЙрд▓ рдХреЙрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ AsyncTask рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдпреВрдЖрдИ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



final TextView disp = new TextView( this );

disp.setText( "0" );

setContentView(disp);



final String pipename = getDir( "pipedemo" , Context.MODE_WORLD_WRITEABLE)

.getAbsolutePath() + "/pipe" ;

final File pipe = new File (pipename);



new AsyncTask<Void, Integer, Integer>() {



@Override

protected void onProgressUpdate(Integer... values) {

disp.setText( "" +values[0]);

};



protected Integer doInBackground(Void... params ) {



//create a pipe

if (mkfifo(pipename) == -1) {

Log.d(TAG, "Pipe error" );

return -1;

}



FileInputStream fis;

try {

fis = new FileInputStream(pipe);

int res = 0;

while (res != -1) { //blocks until someone writes to this pipe

res = fis.read();

publishProgress(res);

}

} catch (Exception e) {

e.printStackTrace();

}

return 0;

}

}.execute();




* This source code was highlighted with Source Code Highlighter .








рд╕реНрдЯреНрд░реАрдо-рд▓реЗрдЦрдХ ред рд╣рдо рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╣реБрдд рд╣реА рдкрд╛рдЗрдк рдореЗрдВ рдкреНрд░рдЧрддрд┐ рд▓рд┐рдЦрддрд╛ рд╣реИред



final String pipename = intent.getStringExtra( "fn" );

new Thread( new Runnable() {



@Override

public void run() {

process(pipename);

}

}).start();




* This source code was highlighted with Source Code Highlighter .








Vorning 1 : рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧреЗ рдореЗрдВ рд▓рдВрдмреЗ рдСрдкрд░реЗрд╢рди рдЪрд▓рд╛рдПрдВ, рдЕрдиреНрдпрдерд╛ рд╕рд┐рд╕реНрдЯрдо рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░ рджреЗрдЧрд╛ред



Vorning 2 : sdcard рдкрд░ рдкрд╛рдЗрдк рди рдмрдирд╛рдПрдВ - FAT32 рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



JNIEXPORT jint JNICALL Java_ru_jecklandin_cats_ProcessingService_process

(JNIEnv * env, jobject, jstring path) {



const char * cpath = env->GetStringUTFChars(path, NULL);

struct stat buf;



if ( stat(cpath, &buf) < 0 || ! (buf.st_mode | S_IFIFO)) {

LOGD( "The file isn't a pipe" );

return -1;

}



int fp = open(cpath, O_WRONLY);

if (fp == -1) {

LOGD( "Could not open the pipe" );

return -1;

}



for ( int i=0; i<10; ++i) {

sleep(1);

write(fp, &i, 1);

}

close(fp);

env->ReleaseStringUTFChars(path, cpath);

return 0;

}




* This source code was highlighted with Source Code Highlighter .








рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ "рдкреНрд░рдХреНрд░рд┐рдпрд╛" рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред



< service android:name =".ProcessingService"

android:process =":remote" >

</ service >




* This source code was highlighted with Source Code Highlighter .






рдбреАрдбреАрдПрдордПрд╕ рдореЗрдВ рд╣рдо рджреЛрдиреЛрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред



рдЫрд╡рд┐



рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдмрдврд╝рддреЗ рдЕрдВрдХреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ)ред



рдЗрд╕ рддрд░рд╣ рд╕реЗ, рдбреБрдкреНрд▓реЗрдХреНрд╕ рд╕рдВрдЪрд╛рд░ (рдПрдХ рдФрд░ рдкрд╛рдЗрдк рд╣реЛрдиреЗ) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдмреЗрд╢рдХ, рд╕рдорд╛рдзрд╛рди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ рдПрдВрдбреНрд░реЙрдЗрдб рдЖрдИрдкреАрд╕реА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреНрд░рдордмрджреНрдз рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рд╕рдВрджрд░реНрдн:

developers.sun.com/solaris/articles/named_pipes.html

developer.android.com/guide/developing/tools/aidl.html



All Articles