問題タブ [commonsware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
152 参照

android - アクティビティとサービス間の通信

コモンズウェア 4.0 ブックの 550 ページでは、Messengerについて説明されており、サービスを開始するときにアクティビティが必要なときにいつでもメッセージをアクティビティに送り返すことができるようにする追加データを添付する方法が説明されています。

次に、サービスが必要なときにいつでもデータをアクティビティに送り返す方法について説明します。

これを実装し、現在アプリで作業しています。

ただし、アクティビティの存続期間中に何度も、アクティビティが他の機会にサービスと通信する必要があります。サービスが必要なときにいつでもアクティビティにメッセージを送信できるようにするツールまたはコンジットはどれですか?

ありがとう、ゲイリー

0 投票する
1 に答える
1800 参照

android - アクティビティを一時停止できません。コンテンツビューはまだ作成されていません

The Busy Coder's Guide to Android Development 4.2 (ここStackOverflowのMark Murphy別名commonswareの提供)に示されているEU4Youサンプルプロジェクトを入手しました。このサンプルプロジェクトをフォローする方が簡単かもしれませんが、質問のコードの関連部分を投稿しようと思います。ActionBarSherlockプロジェクトもインポートする必要があります。また、Javaコンパイラを1.6に設定する必要があります(@Overrideアノテーションを許可するため)。

注:min-sdkを8(2.3、Froyo)に変更し、target-sdkを16(4.1、Ice Cream Sandwich)に変更しました。

注:framelayoutidをに変更しました。framelayoutidcountriesをに変更しました。left_panedetailsright_pane

メインレイアウトファイル(layout-large-land):

メインレイアウトファイル:

サンプルアプリケーションの元のバージョンには、2つのアクティビティがあります(正確にはSherlockFragmentActivities)。

  1. EU4You-適切なレイアウト(デフォルトまたは横向き-大)をロードします。デフォルトの場合、SherlockListFragmentに国のリストをロードします。横長の場合は、リストと詳細フラグメントをロードして、選択した国を表示します。
  2. DetailsActivity-横向きの大きなレイアウトを使用していない場合、DetailsFragmentを介して選択した国をロードします。

リストフラグメント内の国をクリックすると、EU4You(メインのホスティングアクティビティ)がDetailsFragmentの存在と可視性をチェックします。存在する場合は、そのフラグメント内に国のWebサイトをロードします。そうでない場合は、DetailsActivityを起動し、DetailsFragmentの追加を処理します(指定した国のWebサイトをロードします)。

これは、タブレットや携帯電話で複数の画面レイアウトをサポートする一般的なアプリケーションのように、正常に機能します。

私の問題は、DetailsActivityを削除して、単一のアクティビティに固執したいということです。大きな横向きのレイアウトではない場合(つまり、タブレットまたは任意の向きの受話器で縦向きのレイアウトになっている場合)はいつでも、リストフラグメントを詳細フラグメントに交換(置換)したいと思います。したがって、私が行ったことは、EU4YouSherlockFragmentActivityで次のように変更されています。

オリジナル(さらに上のメモに記載されているフレームレイアウト名にわずかな名前の変更があります...国はleft_pane、詳細はright_paneです):

私の変更したシングルアクティビティバージョン

これは期待どおりに機能します。リスト上のWebサイトをクリックすると(タブレットのポートレートモード、または任意の向きの受話器で)、詳細が詳細フラグメントに表示されます。これは、Webサイトリストフラグメントを置き換えます。ただし、国の詳細が表示されているときにデバイスのホームボタンをクリックすると、次のlogcatの詳細で強制終了エラーが発生します(left_paneフレームレイアウトが1つしかないデフォルトのレイアウトのみ... left_paneとright_paneがある場合、タブレットの横向きでこの問題が発生します):

上記のコードから次の行を削除すると、このエラーの発生を防ぐことができます。

置換トランザクションをバックスタックに追加できる必要があるため、この行を削除できません(このサンプルアプリケーションは、より多くのものがある実際のアプリケーションの基礎ですが、問題を単純化するために使用しました)。

したがって、2つの質問:

  1. なぜこうなった?
  2. どうすれば修正できますか(おそらく別のアプローチ)?

注意すべき点の1つは、実際のアプリケーションでは、このロジックはすべてアクションバーのタブ内にある必要があることです(バージョン2.3(Froyo)に戻る必要があるため、ActionBarSherlock)。


更新(2012年11月22日13:27 EST)

サンプルプロジェクトをGitHubに投稿しました。私はEclipseとAndroidの開発に慣れていないので、必要なものがすべて含まれていない可能性があります(ワークスペースは含まれておらず、ActionBarSherlockプロジェクトは含まれていないと思います...インポートする必要があります(ここにあります) )。

0 投票する
1 に答える
1478 参照

android - HTC でオートリンクが機能しない - HtcLinkifyDispatcher

クリック可能なリンクを有効にするために、Android アプリでandroid:autoLinkset towebを使用しています。TextViewしかし、ICS にアップグレードされた HTC Desire S でこれを実行すると、リンクの 1 つをタップすると、次の例外が発生します。

クラスがビルドパスにないため、登録しようHtcLinkifyDispatcherActivityとしてもどこにも行きません。

0 投票する
4 に答える
3708 参照

android - localbroadcastmanagersendorderedbroadcastを組み合わせてブロードキャストを送信します

CommonsWareがこのブログ投稿で説明していることを実装したいと思います:http://commonsware.com/blog/2010/08/11/activity-notification-ordered-broadcast.html。投稿は理にかなっており、https ://github.com/commonsguy/cw-advandroid/tree/master/Broadcastでサンプルソースを参照できました。

私が興味を持っているLocalBroadcastManager.getInstance(UnzipService.this).sendBroadcast(broadcast);のは、サービス内での呼び出しが、マニフェストで定義したタイプのブロードキャストレシーバーによって引き続き受信されるかどうかです。

私が求めていることが明確でない場合、私がやろうとしているのはLocalBroadcastManagerを使用することです。これは、私のサービスからのブロードキャストが必ずしもシステム全体で表示される必要はなく、可能であればプライベートにしておく必要があるためです。ただし、ユーザーがアプリを閉じてもサービスがまだ実行されている場合は、通知を表示したいと思います。サービス内で2回ブロードキャストを送信せずに、これらの機能の両方を組み合わせる方法はありますか?

(私がしたくないこと)のように: LocalBroadcastManager.getInstance(UnzipService.this).sendBroadcast(broadcast); sendOrderedBroadcast(broadcast);

0 投票する
1 に答える
2525 参照

android - keytool と jarsigner を使用してアプリに署名する

コモンズウェアの本と、アプリに署名する方法を説明する Android ドキュメントの両方を使用しています。でも、わからないことがあって…

KeyStore ファイルを問題なく生成できました。

現在、コモンズウェアの本には、「プロジェクトの bin/directory に unsigned.apk ファイルを作成するリリース バージョンをビルドする」と記載されていますが、その方法は説明されていません。Eclipseでそれを行う方法がわかりません。Build -> Release メニュー項目がないようです。グーグルで調べてみましたが、何も見つかりませんでした。

Androidのドキュメントには、「2.アプリケーションをリリースモードでコンパイルする」と書かれており、「署名されていないアプリケーションパッケージをエクスポートする」ように指示され、どこかに保存されます。私はそれをしました、そして今私は2つのapkファイルを持っています. 1 つは私の bin ディレクトリにあり、もう 1 つはエクスポートしました。今ではjarsignerとzipalignerを使用するように言われていますが、私はこれを保存したエクスポートされたapk(私のbinディレクトリにあるものではない)に対して行っていると仮定しています(それは言いません)。次に、この保存された apk を bin ディレクトリ内の apk にコピーするだけですか?? 次回のコンパイル時に消去されませんか?

これは、アプリの作成よりもはるかに難しく、楽しくありません。

誰かが私を正すことができますか?ありがとう、ゲイリー

0 投票する
1 に答える
1479 参照

android - オプションメニューからタイトルバーにオプションを取得する方法ActionBarSherlockandroid

オプションをタイトルバーに表示しようとしています。ActionBarSherlockを使用していて、タイトルバーのタイトルを削除する方法を理解できますが、オプションメニューからテキストを2つのオプションに置き換えたいと思います。

このコード、EmpubLiteをアプリケーションの例として使用していますが、Mark(コモンズウェアの人)がタイトルバーのオプションメニューからアイコンを取得した方法がわかりません。私のオプションはアクションバーの下部に表示され、これは画面上の不要なスペースを占めています。私はここで例を調べてきましたが、タイトルバーでオプションを取得する方法を正確に見つけることができないようです。マーク(または誰か)が説明してくれることを願っています。

0 投票する
1 に答える
106 参照

commonsware - チュートリアル #9 の getWebView() エラー

チュートリアル 9 の手順に従って、AbstractContentFragment オブジェクトを作成しました。本からコードをコピーした後、「メソッド getWebView() は AbstractContentFragment 型に対して未定義です」というエラーが表示されます。

私はコードをチェックしました - それはまさに本にあるものです. プロジェクトに actionbarsherlock ライブラリが含まれています - チュートリアル #8 では問題ありません。webviewfragment クラスに getWebview() メソッドがあります。

ポインタ?

0 投票する
1 に答える
1006 参照

android - NullPointerException onLocationChanged GPS

コモンズウェアのサンプルを試してみました

ここに活動があります

このアクティビティに gps を追加しましたが、試してみるとアプリが強制的に閉じられます

ここにマニフェストがあります

私は許可を追加します

ここにlogcat nullpointer例外があります

ヌルは並んでいますlatTxt.setText(String.valueOf(loc.getLatitude()));

それを修正する方法は?

0 投票する
2 に答える
15689 参照

android - 許可なくサービスの意図を開始することは許可されていません - 送信者は許可を取得しません

私は Mark Murphy の優れた Commonsware の本を読んでいますが、消化するのは大変です。「FakePlayer」アプリを作成しました (mp3 プレーヤーのふりをします)。サービスが含まれています。学習経験として、クリック ハンドラーが行う簡単なアプリ (ボタンしかない) を作成しようとしました。

正常に動作しました - サービスは正常に開始されました。Eclipse がサービスに対する権限がないことを訴えていることに気付いたので、android:permissions と android:exported の 2 行を追加してサービスのマニフェストを更新しました。

Eclipseで「デバッグ」を使用して、プレーヤーアプリをデバイス(Galaxy S2を使用しています)にリロードしました。うまくいったようです。スターターアプリが許可例外を引き起こしました。これは予想通りでした。

次に、スターター アプリのマニフェストに追加しました (アクセス許可を与えるため):

スターター アプリをデバイスにリロードしました (Eclipse でデバッグを使用)。スターターアプリで引き続き許可エラーが発生します。

デバイスから両方のアプリを削除し、(デバッグを使用して) 再インストールしました。最初にサービス アプリ、次にスターターを使用しました。それでもパーマエラーが発生します。

マーフィー氏の高度な Android ブックの「リモート サービスの使用方法」セクションに取り組んでいるので、これはおそらく複数のアプリで作業するための最良の方法ではないことに気付きました。

「adb shell dumpsys package」を実行し、スターター アプリを見つけたところ、「permissionsFixed=false」があり、「grantedPermissions」セクションがないことがわかりました。これは、スターター アプリのマニフェストの変更によって、パーマがアプリに追加されなかったことを意味します。しかし、私には理由がわかりません。学習経験として、これまでのところ混乱しか生じていません....

手がかりは大歓迎です!ありがとう!

0 投票する
1 に答える
1010 参照

android - sw720dp-land レイアウトのテストに使用するエミュレータ

フラグメントをテストするためにいくつかのサンプル コードを実行しています。

https://github.com/commonsguy/cw-omnibus/tree/master/LargeScreen/EU4You

Androidエミュレーターで結果をテストしようとしていますが、選択したエミュレーターはどれも機能していないようです(sw720dp-landレイアウトを使用していません)。Ctrl F11/F12 を押して、画面を横向きに回転させます。

Android Virtual Device Manager で新しい AVD を作成するときに使用する設定を教えてください。具体的には、「デバイス」と「ターゲット」。