アウトドアクローンカメレオンランチャー

約2、3年前に、Android カメレオンランチャー用の興味深いランチャーを偶然見つけました。 作成者が彼に興味を失うまで、私はそれを購入し、しばらくの間それをうまく使用しました。



このランチャーに惹かれたのは、タブレットのホーム画面を案内板に変えることができたことです。ここには、rssテープ、ツイッター、天気などがあります。すべてが美しく便利に見え、画面上の場所が無駄になりません常に小さい)。 さらに、彼はjsで自分のウィジェットを書くことを許可しました。



しかし、作成者は自分の作成に興味を失い(一度キックスターターを介してお金を集めました)、最初はウィジェットが動作しなくなりました(動作するためにサーバーを使用します)、修正されなかったバグがありました。 その結果、最近、アプリケーションはPlayマーケットから完全に削除されました。



徐々に、私の望みは同様のランチャーを書くようになり始めました-私はテクノロジーについて尋ねていましたが、Javaを台無しにしたくありませんでした。 しかし、今週末、私はこのランチャーのクローンを作成することに挑戦しました。 この記事では、現在の状況についてお話します。 おそらく他の誰かがプロジェクトに興味を持ち、それに参加するでしょう。



メイン画面:

画像





アプリケーションリスト:

画像



目標は、最小限の時間で多かれ少なかれ似たようなことをすることでした:スターターのために、アニメーション、ドラッグアンドドロップなど、つまらないものはなく、徐々に機能を目的の状態にします。 また、私は実際にクロスデバイスレイアウトを気にしませんでしたし、7インチタブレット(1024x600)以外のデバイスで水平位置に表示されるかどうかもわかりません。 最小とは最小を意味します。そうでないと、長時間動けなくなることがあります。 私は少なくとも開発用のプロトタイプを作りたいと思っていました。そして一般的には-テクノロジーを感じるために。



また、ウィジェットアーキテクチャの概念に重要な変更を加えました。 これで、クロスドメインリクエストを行うためにサーバーでホストする必要がなくなりました。 サーバー上のスクリプトを使用せずに実行できます。



道の始まり



開発を開始する前に、誰かが私の前にクローンを書き始めたかどうかを確認し(定期的にこれを監視しました)、まだそこにないことを確認し、htmlランチャープロジェクトを探し始めました。 github.com/Aricwithana/DOMLauncher2がすぐに見つかりました 。 しかし、その根拠はあまりふさわしくなく、多くの余分なものであり、コード(ほとんどすべて)を削除するのは時間の無駄です。 したがって、ゼロから始めることにしました。 PhoneGapを使用しないことにしました。 ランチャーのことは単純ではなく、突然何かが私にとって十分ではないように思えたので、クリーンなAndroid SDKで再度起動する必要があります。



Android SDKをインストールした後、次のコマンドを使用してデフォルトのプロジェクトを生成しました。

android create project -n Launcher -t 'android-16' -p . -k com.longerdev.launcher -a LauncherActivity
      
      





メモ
すぐに余談します。ここで、API 4.1のバージョンを示しました。Android4.1を搭載している携帯電話について考えてみます。このため、プロジェクトがJavaScriptInterfaceを使用しない理由を理解しようとして20分を失うことはまだわかりませんそれがそれ以上であること)。



プロジェクトをビルドし、アプリケーションをインストールしました。

 ant debug && ant installd
      
      





私が最初にしたかったのは、ウィンドウのタイトルを取り除くことでした。 検索とさまざまな実験の後、これを行う最善の方法はアプリケーションに登録することであるという結論に達しました。 これを行うには、res / values / styles.xmlファイルを作成し、AndroidManifest.xmlを少し編集します。

 <application ... ... android:theme="@style/AppTheme"> <resources> <style name="AppTheme" parent="android:Theme.Holo.Wallpaper"> <item name="android:windowActionBar">false</item> <item name="android:windowNoTitle">true</item> </style> </resources>
      
      





テーマ名の壁紙は偶然ではありません;削除すると、アプリケーションの背景は黒になります。 しかし、以来 その場合、アプリケーションはシステム設定から壁紙を強化します(これにより、大量のコードを記述する必要がなくなります)。



ランチャーに変身



どのアプリケーションも簡単に「ランチャー」に変えることができます。 これを行うには、AnroidManifest.xmlに2行追加すると、ホームボタンでアプリケーションが使用可能になります。

 <application ... <activity ... <intent-filter> ... <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
      
      





メモ
これについての詳細-arnab.ch/blog/2013/08/how-to-write-custom-launcher-app-in-android



これで、アセンブリとインストールの後、ホームボタンを押すとアプリケーションが使用可能になります。



WebViewの作成とアニメーション



Androidでは、htmlとjsを使用できるようにするために、WebView要素をアプリケーションに追加する必要があります。 これを行うには、メインレイアウト(res / layout / main.xml)を編集します。

 <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" />
      
      





その後、小さなテキストでasset / www / index.htmlを作成し、LauncherActivity.javaでそのディスプレイを接続しました。

 public void onCreate(Bundle savedInstanceState){ ... WebView mainWebView = (WebView) findViewById(R.id.webview); mainWebView.loadUrl("file:///android_asset/www/index.html");
      
      





これで、アプリケーションを実行すると、ファイルの内容を見ることができますが、jsコードを記述しようとすると機能しません。 個別に含める必要があります。

 WebSettings webSettings = mainWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAllowFileAccessFromFileURLs(true); webSettings.setAllowUniversalAccessFromFileURLs(true);
      
      





最後の2行は、アプリケーションの一部であるjsからのクロスドメインリクエストを許可します。



javaからjs関数をスローする



時間が経つにつれて、Android APIにアクセスする必要が生じました。 これを行う方法を探しているうちに、ネイティブメソッドとほぼ同じjsからメソッドを使用できるクラスを作成できることがわかりました(オブジェクトを渡すときにJSON.parseを使用する必要があります)。



クラスコード全体を説明するのではなく、キーポイントのみを説明します。



クラスで関数を作成し、その前に@JavascriptInterfaceを記述すると、jsで使用可能になります。 アプリケーション起動機能:

 @JavascriptInterface public String echo(String name) throws Exception{ return name; }
      
      





実際、このクラスをWebViewに接続する必要があります。

 MyJavaScriptInterface myInterface = new MyJavaScriptInterface(mainWebView, LauncherActivity.this); mainWebView.addJavascriptInterface(myInterface, "AndroidAPI");
      
      





これで、jsから次のようなコードにアクセスできます。

 AndroidAPI.echo();
      
      







おわりに



開発の最も興味深い/難しい段階を説明しました。 何も塗らなかった 記事が長すぎます。 そして、それは興味深いことではありません。 よく聞いて、答えます。



すでにあるもの:

-1つのホーム画面(これまでは不可能でしたが、これは次の手順の1つで、コードをクリーンアップする方法に沿っています)

-ウィジェット-rss(rss 2.0のみをサポート)、天気

-ページングのないアプリケーションの簡単なリスト

-クイックショートカットのカスタマイズ可能なパネル(デバッグに便利な一時的な更新ボタンもあります)



即時計画:

-どういうわけか、設定で設定を行います(これは、Androidの最初のアプリケーションであり、まだ生態系を十分に理解していないため、これは私が最初に必要なものです。

-複数のホーム画面

-より便利なウィジェットAPI

-RSSと天気ウィジェットを書き換える

-twitter、時計(アラーム機能付き)用のウィジェットを作成し、

-クロスデバイスレイアウト(テスト用のデバイスがある場合)



まず最初に、タブレット用のバージョンを実装したいのですが、その場合にのみ、おそらく電話を取り上げます。 標準のAndroidウィジェットのサポートは計画されていません。 Android 4.2(API 17)の最低限必要なバージョン。



コメント、アドバイス、プロジェクトへの参加を希望する人々に感謝します。

ソース-github.com/Longer/ClawLauncher(build )。




All Articles