KKM ATOLをAndroidStudioに接続します(FZ-54への更新)

こんにちは、Habr。 昨年の夏、KKM ATOLをAndroidStudioのプロジェクトに接続する必要がありました。 タスクを正常に完了した後、私はHabréに投稿を公開しました。これは、 自分の道を進む人たちの道を促進するためです。KKMATOLをAndroidStudioに接続します。



法律の更新(FZ-54)に照らして、更新されたドライバーがKKM ATOLに対して発行されました。これには、前述とは少し異なる接続方法が必要です。







カットの下に、私が正確に何をしたかが表示されます。 しかし、Android開発のプロはおそらく自分にとって興味深いものを見つけることはないだろうとすぐに言いますが、私のような初心者にとっては、開発パスが少し簡単になるでしょう。



更新されたドライバーを接続するために、次の手順が実行されました。



1)プロジェクトから古いモジュールを削除しました:ファイル-プロジェクト構造-モジュールセクションから古いモジュールを選択し、赤いマイナスをクリックします。

2)新しいモジュールを追加しました:ファイル-新規-インポートモジュール-フォルダーを探します(提供されたフォルダー内にTrade_drivers_drivers / android / jar)FptrLibResを追加し、プロジェクトに追加します。

3)次に、前の記事と同様に、jniLibs(パス:app / src / main)にarmeabiおよびarmeabi-v7aフォルダーを追加します。

4)libsフォルダーに追加(パス:app / src / main)-jarファイル:fptrlib.jar、fptrproxylib.jar、paycardlib.jar、usblib.jar jarファイルを右クリックして、「ライブラリーとして追加」を選択します";

5)gradleに変更を加えます(前回の記事で作成したテストプロジェクトの例を示します)。



dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile project(':fptrRes') compile files('src/main/libs/fptrproxylib.jar') compile files('src/main/libs/paycardlib.jar') compile files('src/main/libs/usblib.jar') compile files('src/main/libs/fptrlib.jar') }
      
      





6)マニフェストから行を削除します(以前のテストプロジェクトのように行があった場合)。



  <activity android:name="com.atol.drivers.fptr.settings.SettingsActivity" android:label=" " android:windowSoftInputMode="adjustPan"> <intent-filter> <action android:name="android.intent.action.VIEW"/> </intent-filter> </activity> <activity android:name="com.atol.drivers.fptr.settings.DeviceListActivity" android:configChanges="orientation|keyboardHidden" android:label=" "/>
      
      





7)コードにエラーが表示されます。 修正するには、次を変更します。



 fptr = new IFptr();  fptr = new Fptr();
      
      





また、「Receept」という単語を含むステートメントに対してエラーをスローします。 彼らは「領収書」に変更する必要があります。



サンプルテストアプリケーション:



AndroidManifestファイル
 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ru.kkm_test"> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <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> </application> </manifest>
      
      







Gradleファイル
 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "ru.kkm_test" minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile project(':fptrRes') compile files('src/main/libs/fptrproxylib.jar') compile files('src/main/libs/paycardlib.jar') compile files('src/main/libs/usblib.jar') compile files('src/main/libs/fptrlib.jar') }
      
      







MainActivityファイル
 import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; import com.atol.drivers.fptr.Fptr; import com.atol.drivers.fptr.IFptr; import com.atol.drivers.fptr.settings.SettingsActivity; public class MainActivity extends AppCompatActivity { IFptr fptr = null; public String TAG = "atol"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try{ fptr = new Fptr(); fptr.create(this); } catch (NullPointerException ex){ fptr = null; } } public void onClick(View view){ switch (view.getId()){ case R.id.button: Intent intent = new Intent(this, SettingsActivity.class); intent.putExtra(SettingsActivity.DEVICE_SETTINGS, fptr.get_DeviceSettings()); startActivityForResult(intent, 1); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 1){ if(data!=null && data.getExtras()!=null){ String settings = data.getExtras().getString(SettingsActivity.DEVICE_SETTINGS); Toast.makeText(this, settings, Toast.LENGTH_LONG).show(); printSlip(settings); } } } @Override protected void onDestroy() { super.onDestroy(); fptr.destroy(); } public void printSlip(String settings){ if(fptr == null) { try { fptr = new Fptr(); fptr.create(this); } catch (NullPointerException ex) { fptr = null; } } fptr.put_DeviceSettings(settings); fptr.put_DeviceEnabled(true); fptr.Beep(); Log.d(TAG, fptr.GetStatus()+" status"); fptr.put_UserPassword("30"); fptr.put_Mode(1); if(fptr.SetMode()<0){ Log.d(TAG, ": "+ fptr.get_ResultCode()); } fptr.BeginDocument(); fptr.put_Caption("..."); fptr.put_ReceiptLinespacing(255); fptr.put_ReceiptBrightness(15); fptr.put_Alignment(2); fptr.PrintString(); fptr.EndDocument(); fptr.put_Mode(2); fptr.SetMode(); fptr.PrintFooter(); } }
      
      







次に、公式のガイドラインに従って作業します。



その後、休暇を取らせてください。 誰かが時間と神経を節約することを願っています。 誰かがコメントやヒントを持っているなら、私は喜んでそれらに耳を傾けます。



PS:最近、API23を搭載したデバイスでアプリケーションをテストする機会を得ました。 ファイルを作成して読み取るときに、常に例外をキャッチしました。 そこで、許可に関する新しいセキュリティポリシーに出会いました。 OneeLからのすばらしい記事: Androidランタイムの許可は、これを理解するのに役立ちました なぜ、なぜ、どのように



私のアプリケーションのAPI23の機能はこれまで役に立たないと思われていたので、targetSdkVersionを22に下げました。この場合、すべてが正常に動作し始めました。



UPD:

新しいドライバーをダウンロードするためのリンク(2017年1月30日):

ダウンロードセンター

使用済みドライバーでアーカイブする



All Articles