Я пытаюсь протестировать приложение, которое работает как ssh-клиент. Поэтому в данный момент мы используем закрытый ключ, который находится в хранилище на устройстве Android. Чтобы подключиться к серверу ssh, пользователь выбирает ключ в диалоговом окне файла.
Как передать файл в файловую систему ARC, чтобы использовать его в приложении, запущенном дуговой сварщик ?
Я попробовал решение, предложенное в сообщении о доступе к внешнему хранилищу, но даже с Включены экспериментальные параметры разработчика. Я не смог понять седьмой шаг («Перейдите на вкладку «Эксперименты», указанную в левой части всплывающего окна. Это видно, только если вы вообще включили экспериментальные функции»). нет "Экспериментального" варианта.
Из-за комментариев я использую Intent.ACTION_GET_CONTENT
вместо FileDialog. Я на шаг впереди. Теперь у меня есть диалоговое окно файла Android в ARC. Однако я не могу выбирать файлы, кроме txt-files.x. Я также пробовал "intent.setType(*/*)"
, как указано в этом опубликовать.
private void activity_android_open(View view) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, 0);
}
забастовка>
Я могу выбрать ключ и получить путь к файлу на своем устройстве Android с помощью следующих методов (из -uri-for-intent-action-get-content">здесь). Однако при использовании ARC я могу выбрать файлы с моего тома, но путь к файлу пуст. Тосты показывают правильное расположение файла на моем устройстве Android. Однако в сварщике строка пуста.
/**
* Opens file dialog to choose RSA key???
* @param view The current view, here the button pressed.
*/
public void activity_simple_open(View view){
// see https://stackoverflow.com/questions/29425408/local-file-access-on-google-chrome-arc/29426331#29426331
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode==RESULT_OK){
Uri uri = data.getData();
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
filePath = Environment.getExternalStorageDirectory() + "/" + split[1];
}
// TODO handle non-primary volumes
}
}
showToast(filePath);
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(getString(R.string.prefKey_privKeyFilePath), filePath);
editor.commit();
}
private void showToast(String message){
Toast toast = Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG);
toast.show();
}
Когда я использую chrome://inspect/#apps
для просмотра журнала, я получаю сообщение об ошибке
Uncaught (in promise)
TypeError: Cannot read property 'retainKey' of undefined {stack: (...), message: "Cannot read property 'retainKey' of undefined"} message: "Cannot read property 'retainKey' of undefined"
stack: "TypeError: Cannot read property 'retainKey' of undefined↵ at chrome-extension://adhppmdiaclmoepimdhlkdelgabmhdlf/_modules/mfaihdlpglflfgpfjcifdjdjcckigekc/gen_index.min.js:67:114"get stack: function () { [native code] }arguments: nullcaller: nulllength: 0name: ""prototype: StackTraceGetterconstructor: function () { [native code] }__proto__: Object__proto__: function Empty() {}apply: function apply() { [native code] }arguments: nullbind: function bind() { [native code] }call: function call() { [native code] }caller: nullconstructor: function Function() { [native code] }length: 0name: "Empty"toString: function toString() { [native code] }__proto__: Object<function scope><function scope>No Scopesset stack: function () { [native code] }__proto__: Error(anonymous function) @ filesystem.js:546
ACTION_GET_CONTENT
, чтобы открыть приложение «Файлы Chrome OS». - person CommonsWare   schedule 18.04.2015ACTION_GET_CONTENT
, чтобы вызвать приложение Chrome OS Files. Следовать инструкциям, на которые вы ссылаетесь, вероятно, бессмысленно, поскольку пользователи не смогут этого сделать, даже если вы это сделаете. Пользователи будут ожидать, что они выберут файл со своего компьютера с Chrome OS, потому что все остальные приложения для Chrome OS будут делать это именно так. Единственный известный мне способ сделать это в ARC — использоватьACTION_GET_CONTENT
для запуска приложения Chrome OS Files. - person CommonsWare   schedule 19.04.2015