Barnes&Noble Nook電子書籍のアプリケーション開発

画像



はじめに



最近、私たち( mynook.ru最初の投稿2番目の投稿 )は、自分自身のためにアプリケーションを書く方法を尋ね始め、 reformal.ruでプロファイルを開き、FBReaderのソースコードを入れるように頼みました。

これで、 Google codeですべてのソースコードを見つけることができますが、最初のコードについては、今すぐお話しします。



写真でこの投稿をデザインするのを手伝ってくれた優れたデザイナーnilovに感謝します。



対象者



私はさらに読む人がアンドロイドの開発の基礎を知っていると仮定します(より正確には、1.5未満)。したがって、アンドロイドの基礎について質問しないでください、特にロシア/ウクライナ/などでnukを購入する方法を議論しないでください...



鉄片の特徴



nookdevs.orgの対応するページで最も正確な情報を見つけることができます。

私たちにとって重要なのはスクリーンです。 彼は、ご存知のように、ヌカでは2つの部分に分かれています-色感覚とb / w E-Ink。 そして、幅が一致しません







Android自体から見ると、これはサイズが600x944ピクセルの1つの大きな画面であり、LCDの画像は引き伸ばされずに切り取られます。 システムの観点から見たこの不名誉は次のとおりです。







画面レイアウト



ここではすべてが非常に簡単です。 E-InkとLCDスクリーン用の2つのコンテナを作成する次のテンプレートを使用するだけです。



<? xml version ="1.0" encoding ="utf-8" ? > <br> < LinearLayout <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> android:layout_width ="fill_parent" <br> android:layout_height ="fill_parent" <br> android:orientation ="vertical" > <br><br> < FrameLayout <br> android:id ="@+id/eink" <br> android:layout_width ="600.0px" <br> android:layout_height ="760.0px" <br> android:background ="@android:color/white" /> <br><br> < FrameLayout <br> android:id ="@+id/lcd" <br> android:layout_width ="480.0px" <br> android:layout_height ="144.0px" <br> android:background ="@android:color/black" /> <br><br> </ LinearLayout > <br><br> * This source code was highlighted with Source Code Highlighter .







ただし、E-Ink画面の境界線はほぼ横に近く、このため、境界線に近いコンテンツは読むのが非常に不便であり、通常は見栄えがよくないため、エッジから必要なインデントを付けてすぐにオプションを使用することをお勧めします(画面の境界線はありませんが、タスクバーとすべてがうまく見えるため、上からのインデントは必要ありません):



<? xml version ="1.0" encoding ="utf-8" ? > <br> < LinearLayout <br> xmlns:android ="http://schemas.android.com/apk/res/android" <br> android:layout_width ="fill_parent" <br> android:layout_height ="fill_parent" <br> android:orientation ="vertical" > <br><br> < FrameLayout <br> android:id ="@+id/eink" <br> android:layout_width ="584.0px" <br> android:layout_height ="752.0px" <br> android:layout_marginLeft ="8px" <br> android:layout_marginRight ="8px" <br> android:layout_marginBottom ="8px" <br> android:background ="@android:color/white" /> <br><br> < FrameLayout <br> android:id ="@+id/lcd" <br> android:layout_width ="480.0px" <br> android:layout_height ="144.0px" <br> android:background ="@android:color/black" /> <br><br> </ LinearLayout > <br><br> * This source code was highlighted with Source Code Highlighter .







次に、アプリケーションでTitleBarを無効にする必要があります(通常のAndroidでは画面のタイトルの役割を果たす狭いストリップ)。 これは、AndroidManifest.xmlのapplication / activity引数を介して実行されます。android:theme = "@ android:style / Theme.Light.NoTitleBar"



もちろん、タスクバーが非表示になるように、完全なフルスクリーンモードを作成することもできますが、画面はすでに非常に大きく、実行する理由はありません。これを行うことはお勧めしません。



追加のAPI



NookActivityの追加APIと、 スケルトンアプリケーションをダウンロードすることで取得できる別のクラスをリクエストしました



タスクバーでタイトルを設定する


これは、次のコードを使用してインテントを介して行われます。

private final static String NOOK_UPDATE_TITLE = "com.bravo.intent.UPDATE_TITLE" ;<br><br> protected void nookUpdateTitle( String title) {<br> try {<br> Intent intent = new Intent(NOOK_UPDATE_TITLE);<br> String key = "apptitle" ;<br> intent.putExtra(key, title);<br> sendBroadcast(intent);<br> } catch (Exception ex) {<br> ex.printStackTrace();<br> }<br> } <br><br> * This source code was highlighted with Source Code Highlighter .







ハードボタンとジェスチャー


ページめくりボタンには次のコードがあります。

public static final int NOOK_KEY_PREV_LEFT = 96;<br> public static final int NOOK_KEY_PREV_RIGHT = 98;<br><br> public static final int NOOK_KEY_NEXT_LEFT = 95;<br> public static final int NOOK_KEY_NEXT_RIGHT = 97; <br><br> * This source code was highlighted with Source Code Highlighter .





タッチスクリーンジェスチャには次のコードがあります。

public static final int NOOK_KEY_SHIFT_UP = 101;<br> public static final int NOOK_KEY_SHIFT_DOWN = 100; <br><br> * This source code was highlighted with Source Code Highlighter .







スクリーンセーバーコントロール




結局のところ、スクリーンセーバー自体がオンにならないように手動で行う必要がありました。

これを行うには、スクリーンセーバーの外観を制御する独自のクラシックを作成しました。このコードには「android.permission.WAKE_LOCK」の許可が必要です。



public class NookScreensaverLock {<br> Context context;<br> long timeOut = 10 * 60000;<br> PowerManager.WakeLock lock ;<br><br> public NookScreensaverLock(Context context) {<br> this .context = context;<br><br><br> PowerManager power = (PowerManager) context.getSystemService(Activity.POWER_SERVICE);<br> lock = power.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "nookactivity" + hashCode());<br> lock .setReferenceCounted( false );<br><br> readSystemValues();<br> }<br><br> private void readSystemValues() {<br><br> try {<br> String [] values = {<br> "value" <br> };<br> String name = null ;<br> String [] fields = {<br> "bnScreensaverDelay" <br> };<br> for ( int i = 0; i < fields.length; i++) {<br> if (name == null ) {<br> name = "name=?" ;<br> } else {<br> name += " or name=?" ;<br> }<br> }<br> Cursor c = context.getContentResolver().query( Uri .parse( "content://settings/system" ), values, name, fields, "name" );<br> if (c != null ) {<br> c.moveToFirst();<br> long lvalue = c.getLong(0);<br> if (lvalue > 0) {<br> timeOut = lvalue;<br> }<br><br> }<br> c.close();<br> c.deactivate();<br><br> } catch (Exception ex) {<br> ex.printStackTrace();<br> }<br> }<br><br> public void release() {<br> if ( lock .isHeld())<br> lock .release();<br> }<br><br> public void acquire( long time) {<br> lock .acquire(time);<br> }<br><br> public void acquire() {<br> lock .acquire(timeOut);<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .







readSystemValues()は、システム設定を読み取り、ユーザーが設定で設定したスクリーンセーバーのタイムアウト値を受け取ります。



Nukの基本アクティビティ



これは、Nookでより便利な作業を行うためにすべてのアクティビティを継承するために必要なものです。また、NookScreensaverLockの使用方法も理解できます。

public abstract class NookActivity extends Activity {<br><br> public static final int NOOK_KEY_PREV_LEFT = 96;<br> public static final int NOOK_KEY_PREV_RIGHT = 98;<br><br> public static final int NOOK_KEY_NEXT_LEFT = 95;<br> public static final int NOOK_KEY_NEXT_RIGHT = 97;<br><br> public static final int NOOK_KEY_SHIFT_UP = 101;<br> public static final int NOOK_KEY_SHIFT_DOWN = 100;<br><br> private NookScreensaverLock lock ;<br><br> private final static String NOOK_UPDATE_TITLE = "com.bravo.intent.UPDATE_TITLE" ;<br><br> protected void nookUpdateTitle( String title) {<br> try {<br> Intent intent = new Intent(NOOK_UPDATE_TITLE);<br> String key = "apptitle" ;<br> intent.putExtra(key, title);<br> sendBroadcast(intent);<br> } catch (Exception ex) {<br> ex.printStackTrace();<br> }<br> }<br><br> @Override<br> protected void onCreate(Bundle savedInstanceState) {<br> super.onCreate(savedInstanceState);<br> lock = new NookScreensaverLock( this );<br> lock .acquire();<br> }<br><br> @Override<br> public void onUserInteraction() {<br> super.onUserInteraction();<br> lock .acquire();<br> }<br><br> @Override<br> protected void onResume() {<br> super.onResume();<br> lock .acquire();<br> }<br><br> @Override<br> protected void onPause() {<br> super.onPause();<br> lock .release();<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .







開発機能





ルース




まず、ルートが必要です。 私とnilovのファームウェアについてアドバイスすることができます。これは、ブログmynook.ruに常にあります。たとえば、開発に便利なアプリケーションマネージャーがあります。



手順: mynook.runookdevs.com



ADBとデバッグ




まとめ



実際、Nukの開発の主要な機能をすべて公開し、開発を簡素化する単純なクラスを作成しようとしました。

念のため、スケルトンアプリケーションへのリンクを複製します



All Articles