Хорошо, я попытался исправить проблему с самым глупым из существующих приложений.Вы можете найти этот в виде гистограммы на github .
. До сих пор я обнаружил это:
- Единственное место, где работает канал, - это папка приложения.(т. е.
/data/data/package.full.name/
) - Если вы хотите передать данные в другую программу, лучше запустить ее как дочерний элемент вашего приложения, чтобы убедиться, что они находятся в одной группе и, таким образом, имеют одинаковые полномочия дляпапка.Если вы не можете, вы можете играть с группами (наберите
ls -l -a
на /data/data/
и посмотрите название группы).
НЕ ЗАБУДЬТЕ: Вы не могу на самом деле писать в трубу, пока кто-то не слушает на другой стороне.Поэтому, если вы протестируете файл, который я разместил на github, у вас будет такой результат logcat.
I/ActivityManager( 220): Start proc fr.stackr.android.upt for activity fr.stackr.android.upt/.UnixPipeActivity: pid=1359 uid=10048 gids={}
I/UPIPE ( 1359): Attempt started
W/ActivityManager( 220): Launch timeout has expired, giving up wake lock!
W/ActivityManager( 220): Activity idle timeout for HistoryRecord{4643c8b8 fr.stackr.android.upt/.UnixPipeActivity}
Здесь системная пауза, потому что ничего не происходит ... Затем я запускаю cat v_pipe
на телефоне.
V/UPIPE ( 1359): SEND :: Try to write the first paragraph ....
V/UPIPE ( 1359): SEND :: Bip
V/UPIPE ( 1359): Flushing...
V/UPIPE ( 1359): SEND :: Bip post flush
V/UPIPE ( 1359): Closing…
I/UPIPE ( 1359): Attempt ended
Готово.
закрытие : когда я закрываю OutputStreamWriter
, сторона прослушивания (то есть cat
) заканчивается.Если я закомментирую строку, cat
все равно будет ждать ввода.
сброс : кажется важным, если вы хотите получить что-то без вызова close.
Возврат каретки : Использовать \n
.