Добрый день, уважаемые коллеги!
В данной части рассмотрим создание двух приложений на мобильной платформе и Java Android Studio. И реализуем вызов приложение Java из 1С.
1. Начнем с реализации мобильного приложения на Java. Запускаем Android Studio
Выбираем версию SDK. Я выбрал минимальную для работы на большинстве мобильных устройств 2.3.3
Открываем activity_main.xml и рисуем две кнопки:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/btnTime"
android:text="Показать время">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/btnDate"
android:text="Показать дату">
</Button>
</LinearLayout>
Пишем реализацию MainActivity.java:
package ru.w0rm.develop.intentfilter;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnTime = (Button) findViewById(R.id.btnTime);
Button btnDate = (Button) findViewById(R.id.btnDate);
btnTime.setOnClickListener(this);
btnDate.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent;
switch(v.getId()) {
case R.id.btnTime:
intent = new Intent("ru.w0rm.intent.action.showtime");
startActivity(intent);
break;
case R.id.btnDate:
intent = new Intent("ru.w0rm.action.showdate");
startActivity(intent);
break;
}
}
}
В коде мы определили кнопки и присвоили им Activity как обработчик нажатий. В методе onCilck мы определяем какая кнопка была нажата и создаем Intent.
Для создания Intent используем конструктор: Intent (String action). Т.е. мы при создании заполняем атрибут объекта Intent, который называется action. Это обычная строковая константа. Action обычно указывает действие, которое мы хотим произвести. Аction – это некий идентификатор окна, по которому мы его будем вызывать из 1С. В моем случае это ru.w0rm.intent.action.showtime и ru.w0rm.action.showdate
Теперь создадим два дополнительных Layout (окна) time.xml и date.xml. Одно окно будет отображать текущее время, а второе дату. Эти Layout мы будем вызывать из 1С.
time.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvTime"
android:text="TextView"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:textSize="30sp">
</TextView>
</LinearLayout>
date.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tvDate"
android:text="TextView"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:textSize="30sp">
</TextView>
</LinearLayout>
Cоздаем класс ActivityTime с суперклассом android.app.Activity.
Пишем код в ActivityTime.java:
package ru.w0rm.develop.intentfilter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ActivityTime extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.time);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = sdf.format(new Date(System.currentTimeMillis()));
TextView tvTime = (TextView) findViewById(R.id.tvTime);
tvTime.setText(time);
}
}
Аналогично создаем класс ActivityDate.
Пишем код в ActivityDate.java:
package ru.w0rm.develop.intentfilter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ActivityDate extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.date);
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String date = sdf.format(new Date(System.currentTimeMillis()));
TextView tvDate = (TextView) findViewById(R.id.tvDate);
tvDate.setText(date);
}
}
Теперь только осталось дописать в манифесте:
<activity android:name="ActivityTime">
<intent-filter>
<action android:name="ru.w0rm.intent.action.showtime"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
<activity android:name="ActivityDate" android:label="Date basic">
<intent-filter>
<action android:name="ru.w0rm.action.showdate"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
Здесь мы как раз и инициализируем наши Action. В итоге в манифесте должно получиться следующее:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.w0rm.develop.intentfilter">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ActivityTime">
<intent-filter>
<action android:name="ru.w0rm.intent.action.showtime"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
<activity android:name="ActivityDate" android:label="Date basic">
<intent-filter>
<action android:name="ru.w0rm.action.showdate"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
</application>
</manifest>
Запускаем мобильное приложение и проверяем. При нажатии на кнопки вызываются два окна. Одно показывает дату, второе время.
2. Теперь создадим приложение на мобильной платформе 1С и будем вызывать наши Activity из приложения на Java
Создаем новую конфигурацию. Имя Intent. Назначение использования - Мобильное устройство.
Создаем общую форму - Начальная форма. На форму добавляем две команды - ПоказатьВремя и ПоказатьДату.
Добавляем обработчики команд:
&НаКлиенте
Процедура ПоказатьВремя(Команда)
#Если МобильноеПриложениеКлиент Тогда
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие="ru.w0rm.intent.action.showtime";
НовВз.Запустить(Истина);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьДату(Команда)
#Если МобильноеПриложениеКлиент Тогда
НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие="ru.w0rm.action.showdate";
НовВз.Запустить(Истина);
#КонецЕсли
КонецПроцедуры
В обработчике и указываем Action из форм Java. По ним и будут вызываться необходимые нам Activity.
Открываем Рабочую область начальной страницы и выбираем нашу Начальную форму.
Публикуем мобильное приложение и запускаем. Видим, что при нажатии на кнопки у нас вызываются окна из мобильного приложения написаного на Java.
В следующей части //infostart.ru/public/613225/ рассмотрим как передавать значения в1С из приложения Java.
Спасибо за внимание!