トップページ⇒tech
1001コメント363KB

Androidプログラミング質問スレ Part23

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2012/06/19(火) 19:57:12.12
このスレではAndroidSDK・NDKやAndroidマーケットに関する質問を扱ってます。

※プログラミング自体が初めて!なあなたには↓↓↓こちらへ
スレ立てるまでもない質問はここで 118匹目
http://toro.2ch.net/test/read.cgi/tech/1331904826/
Eclipse統合M32【Java/C++/Ruby/Python/Perl】
http://toro.2ch.net/test/read.cgi/tech/1320318310/
★★Java質問・相談スレッド153★★
http://toro.2ch.net/test/read.cgi/tech/1334438859/

****関連リンク****
■ Android developers http://developer.android.com/
■ ソフトウェア技術ドキュメントを勝手に翻訳 http://www.techdoctranslator.com/

****前スレ****
Androidプログラミング質問スレ Part22
http://toro.2ch.net/test/read.cgi/tech/1337170429/
0183デフォルトの名無しさん2012/06/27(水) 00:18:52.21
https://sites.google.com/site/androyerjapan/home/layoutinflater
01841552012/06/27(水) 00:19:08.05
160〜169の皆様

 logcatは確かに初歩的な内容でした、調べてみるとわかりました。申し訳ありません。
 そして今は実機をUSBで繋いでデバッグするためにドライバをインストールしたのですが、パソコン側で認識してくれなくて四苦八苦しています。
 恥ずかしながら、普段はレンタルサーバーにアップしたapkをわざわざダウンロードして実行する手間なことをしていたので・・・


>>169
 お金をもらってやっているわけではありません。
 クラス名などを単純な名前に変えた方が、皆様にわかって頂きやすいかと思ったたけです、誤解を招いたようならすみません。
 普段は2chを見ないので知りませんでしたが、営利なら聞いてはいけないというルールがあるんですね、もし仕事でプログラムをする機会があれば、ここでは聞かないようにします。
0185デフォルトの名無しさん2012/06/27(水) 00:21:37.76
そんなルールないよ
気に障って突っかかる奴が居るだけ
0186デフォルトの名無しさん2012/06/27(水) 00:25:56.44
ドライバをいったん削除して、実機繋がずにインストール→実機つなぐ
のコンボでうまくいくかも
使ってる端末どこの?

あと、ここを使うのはあくまでヒントを得るためで、まんま教えられたコードをそのまま使うんじゃなくてちゃんと検証しないとマとしてダメだよってこと
質問に営利非営利関係ないさ
0187デフォルトの名無しさん2012/06/27(水) 00:33:56.52
設定→開発→デバッグ
をONにしてないだけだったりして

あとADBインターフェイス(だっけ?)ドライバじゃないとダメとか
しらないと結構ハマる人が多かった気が

違う、それは端末をストレージとして認識させるドライバだ!
と何度突っ込んだ事か
0188デフォルトの名無しさん2012/06/27(水) 00:34:39.62
うおおおおLayoutInflater初めて知ったw
動的なレイアウトはjavaだけで書いてきたけど
xmlでもいけるのか
0189デフォルトの名無しさん2012/06/27(水) 00:51:15.05
>>184

android:debuggable="true"にしてないとか。
http://developer.android.com/tools/device.html
http://www.adakoda.com/android/000242.html
あたり参考にしてみて。

> 普段はレンタルサーバーにアップしたapkをわざわざダウンロードして
> 実行する手間なことをしていたので・・・
Logcat見れるアプリもあるから、入れておくと便利かも。
Playストアでlogcatで検索するといくつかある。
自分はCatLog使ってる。
01901552012/06/27(水) 01:22:52.60
>>185
 そういうルールはないんですね。
 右も左もわからないところで言われると、ついつい信じてしまいがちになります。情弱とは私みたいなのを言うのかもしれませんね。

>>186
 ドライバをインストールするのにinfファイルを右クリックでインストールしようとしても、「選択されたINFファイルでは、
このインストールの方法はサポートされていません」と言われてしまいましたので、教えて頂いた手順ではできませんでした。
 端末はlenovoのIdeaPad Tablet A1で、ドライバは公式からダウンロードしました。
 インストールすると、デバイスマネージャーでは「Android Composite ADB Interface」と出るのですが、adb devices
コマンドでは「List of devices attached」と出ます。また、eclipseで「実行の構成」からターゲットを手操作で実行しても、
「Choose a running Android device」に何も出てきません。

 確かに、教えられたことを単純にコピペするだけで留まらないように心掛けてはいます、なぜそのコードで動くのか、意味を
ある程度理解できるよう自分なりに調べているつもりです。

>>187
 実機の設定は、「デバッグ」と「提供元不明のアプリ」はONにしてあります。
 ADBインターフェースドライバというのは、186さんへのレスで書いた「Android Composite ADB Interface」でいいのでしょうか?

>>189
 マニフェストファイルのdebuggableもtrueにしてあります。
 LogCatを見れるアプリもあるんですね、試してみます。


 皆様、親切に教えて頂きましてありがとうございます。
0191デフォルトの名無しさん2012/06/27(水) 01:31:59.60
android自体のソースどこかからダウンロード出来るもの?
エラー出ても普段追えないソース追えたりするのかなと
デバッグ実行以前にコンパイルも無理そうな予感がするから見るだけになるけど

なんでエラー発生してるの?っていう場面が多くて堪らない
作法を知らないだけなんだけどさ
0192デフォルトの名無しさん2012/06/27(水) 01:43:28.43
>>190
>実機の設定は、「デバッグ」と「提供元不明のアプリ」はONにしてあります。
>ADBインターフェースドライバというのは、186さんへのレスで書いた「Android Composite ADB Interface」でいいのでしょうか?

そう、それそれ。あってます。
じゃあ何が問題なんでしょうな…
adb kill-server
adb start-server
を試してみるとかどうでしょう。
たまにこれで見えないデバイスが見えるようになるんだけど。

あと、最近はdebuggableって無視されるんじゃなかったっけ?
俺そんなの書いたことない。
0193デフォルトの名無しさん2012/06/27(水) 01:49:42.45
>>191
最近はSDKダウンロード時にソースも一緒に落とせるようになってるんだぜ。
但し完璧に全部ではないっぽい。
多分、ネイティブ側のソースはこれでは手に入らない。

昔はgitとか言うの使ってごりごり全部落としたんだが、
pythonのバージョンが違うとか何とか色々はまって泣きそうになってた。
あと落ちてきたソースのサイズが思いのほかでかくて泣きそうになってた。
今でも全ソースが欲しければコレやるしかないけど、
ネット上で日本語の情報を探しても、殆ど内容が陳腐化してしまっていて、
あんまり役に立たなかった気がする。
とりあえず気合と根性とcygwinがあればなんとかなる。がんがれ。

そしてやり方分かったらここに手順を報告していただけると助かりますw
0194デフォルトの名無しさん2012/06/27(水) 01:56:09.99
オレ、ソース見るの、"GrepCode"使ってるわ
http://grepcode.com/

以前はOESFのgithub見てたなぁ
https://github.com/OESF
0195デフォルトの名無しさん2012/06/27(水) 02:02:05.40
native のソース持ってきた所でデバッガで追えるわけでなし、何知ったかぶりしてんだか
0196デフォルトの名無しさん2012/06/27(水) 02:07:16.37
なんだ突然
ネイティブ側のソースが読めなかったのがそんなに悔しかったのか
01971552012/06/27(水) 02:08:54.58
>>192
 kill-server、start-server を実行し、改めて devices してもダメでした。
 実機を接続しての実行はLogCatを確認するための手段でしたので、189さんに教えて頂いたCatLogをインストールして実機でLogCatを確認することにしてみます。
 せっかく教えて頂いたのに結果を出せずにすみません、ありがとうございます。
0198デフォルトの名無しさん2012/06/27(水) 02:25:04.33
おれもgrepcode見てるぜ
かなり勉強になる
0199デフォルトの名無しさん2012/06/27(水) 03:50:33.12
>>192
Eclipse使ってるときはdebuggable=trueしなくていい、って書いてた。
すまん。

>>191
前はrepoで取ってきてたけど、今は下記のサイトを使ってる。
https://sites.google.com/site/devcollaboration/codesearch
1.6とか、古いバージョンのソースを見るときは、GrepCode使ってる。
0200デフォルトの名無しさん2012/06/27(水) 04:48:04.70
本家も忘れんな
https://android.googlesource.com/
0201デフォルトの名無しさん2012/06/27(水) 09:05:02.82
インテントで、ツイッタークライアントだけを取ってくる方法ってありますか?
intent.setType("text/plain");
だと関係ないアプリが表示される
0202デフォルトの名無しさん2012/06/27(水) 09:13:18.54
ない
自力でツウィッタークライアントのパッケージ名一覧を作るしか
0203デフォルトの名無しさん2012/06/27(水) 09:38:48.95
>>201
BRAWSABLEで、hostを"www.twitter.com"とするフィルターでイケるんじゃね?

手元にあったPlumeとTwitcleは両方ともこのフィルター持ってた。他は知らんw
0204デフォルトの名無しさん2012/06/27(水) 09:39:41.17
なんだよ"BRAWSABLE"てw  正しくは"BROWSABLE"な
0205デフォルトの名無しさん2012/06/27(水) 09:47:20.80
Excelのようなセルの集合体を作りたい場合は
EditTextを気合で並べるか、グラフィック(?)で描画するくらいしか方法はないですか?
CodeZineのDBGridを使ってみたけど列と行が大量にあるとだめぽお・・・
0206デフォルトの名無しさん2012/06/27(水) 09:50:19.25
GridViewをカスタマイズして使うか、ListViewやGridViewのように見えなくなったViewを再利用する方法を取れば?
0207デフォルトの名無しさん2012/06/27(水) 09:56:35.62
>>206
再利用する方法を使います。
ありがとうございます。
02082012012/06/27(水) 11:08:24.11
実装出来ました。
ありがとう御座います。
参考になれば使ってください。
try {
Tweet = "https://twitter.com/intent/tweet?text="
+ URLEncoder.encode(Title, "UTF-8")
+ "+"
+ URLEncoder.encode(HashTag, "UTF-8")
+ "&url="
+ URLEncoder.encode(mUrl, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Intent intenttw = new Intent(Intent.ACTION_VIEW, Uri.parse(Tweet));
startActivity(intenttw);
0209デフォルトの名無しさん2012/06/27(水) 14:01:41.54
このようなダイアログに自作アプリを表示させるには、どのようにすればよろしいのでしょうか?
http://www.dotup.org/uploda/www.dotup.org3136556.png
0210デフォルトの名無しさん2012/06/27(水) 14:16:52.06
自作アプリをブラウザにすればよろしい
0211デフォルトの名無しさん2012/06/27(水) 15:54:33.58
Android4.0.xでWebViewを表示するアプリを作ってます。
以前の2.x系のWebViewではリンククリック時にリンクがハイライト表示されたのですが、
同じアプリでも4系ではハイライト表示されないようです。
なにか必要な処理が変わったんでしょうか?教えてください。
0212デフォルトの名無しさん2012/06/27(水) 17:19:40.40


【社会】 日本人女性2人、リゾート地・セブ島で知り合った韓国人の男2人と飲酒→集団強姦される…フィリピン★8
http://uni.2ch.net/test/read.cgi/newsplus/1340777581/

【社会】セブ島で、韓国人男性2人が日本人女性を集団強姦→ネットで韓国人 「日本は昔、同じことをやった」★2
http://uni.2ch.net/test/read.cgi/newsplus/1340777561/

0213デフォルトの名無しさん2012/06/27(水) 21:01:28.91
>>209
Intentのこと?
0214デフォルトの名無しさん2012/06/27(水) 23:09:28.24
OutOfMemory対策に画像の展開メモリサイズを知りたいのですが方法はありますか?寸法はinjustdecodeboundsで得られても何ビット画像なのか分からないので詰まりました。
0215デフォルトの名無しさん2012/06/27(水) 23:18:00.65
ARGB8888とか自分で指定すれば計算できるんじゃまいか
0216デフォルトの名無しさん2012/06/28(木) 00:16:42.10
http://www.ibm.com/developerworks/jp/web/library/wa-scalable/fig16.jpg
楕円にこういうグラデーション掛けるのどうすればいい?
RadialGradientは円なら描けるけど
円で描画してから変形するんじゃなくて直接的に楕円で描く方法ってある?
0217デフォルトの名無しさん2012/06/28(木) 00:21:26.39
円にグラデかけてから歪ませればエエやん?
0218デフォルトの名無しさん2012/06/28(木) 01:16:24.07
ComposeShaderでできたわ
0219デフォルトの名無しさん2012/06/28(木) 09:19:31.36
3.0からwebviewで長押しすると画面上部にバーが出るようになりましたが、
これを出ないようにするか、これのコピーを検知する方法はないでしょうか。
0220デフォルトの名無しさん2012/06/28(木) 17:25:28.91
>>219
startActionModeをオーバーライドしてnullを返せば抑止できた気がする
0221デフォルトの名無しさん2012/06/28(木) 21:04:28.89
ActivityA⇒ActivityB⇒ActivityAと画面遷移した後、finish()を実行すると、ActivityBに戻ってしまいます
本当はアプリ自体を終了させたいのですが。。

ちなみにActivityBで動いている処理は、onPause()のタイミングで全て止めています
0222デフォルトの名無しさん2012/06/28(木) 21:09:28.59
>>221
ActivityBでfinish()してないからじゃね
02232212012/06/28(木) 21:13:03.48
>>222
基本的にstartActivity()した後は必ずfinishしています
0224デフォルトの名無しさん2012/06/28(木) 21:13:21.52
http通信で100KBまでダウンロードして100KBの時点で終了したいんですが

http.connect();
InputStream in = http.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
StringBuilder builder = new StringBuilder();
char[] buf = new char[1024];
int numRead;
while (int i = 0;i < 50;i++) {
builder.append(buf, 0, numRead);
}
reader.close();
in.close();
http.disconnect();
こんな感じに普通に途中で切ってしまっても大丈夫なんでしょうか?
02252212012/06/28(木) 21:15:05.63
>>222
と思ったら、ピンポイント的にfinishが抜けておりました・・・
ありがとうございました!!
0226デフォルトの名無しさん2012/06/28(木) 22:09:30.93
必ずfinishしています(キリッ
0227デフォルトの名無しさん2012/06/28(木) 22:10:49.90
finish(>>226);
0228デフォルトの名無しさん2012/06/28(木) 23:25:12.99
finish(人生)
0229デフォルトの名無しさん2012/06/29(金) 00:16:35.15
標準のブラウザや他のブラウザアプリはタイトルバー+webview+メニューのパターンが多いのですが、
webviewのスクロールに合わせてタイトルバーもスクロール(下にスクロールすると隠れる)するのはどう実現しているのでしょうか?
LinearLayOutでタイトル+webview+メニューで順番に配置した場合
タイトルバーはwebviewのスクロールに合わせて移動してくれません・・・
0230デフォルトの名無しさん2012/06/29(金) 08:29:23.93
>>228
わざわざ、指摘してるのに
「それはちゃんとやってますから」とか自慢げにいうやつってなんなんだろうね。
「ちゃんと作ったのに動きません」とかさ。
いや、ちゃんと作ってないから動いてないんだよ。

プログラムは作った通りにしか動かない

これ分かってない奴多すぎだろ
(あぁ、コンパイラのバグとかは除いてw)
0231デフォルトの名無しさん2012/06/29(金) 08:48:37.51
>>229
RelativeLayoutで重ねて置けばおk
0232デフォルトの名無しさん2012/06/29(金) 14:56:02.27
アクションバーってメニューボタンを廃止して、
従来のメニュー・処理を常に押せるように表示しておけってことですよね。

ぶっちゃけこれってアイフォンのパクリってことでいいんでしょうか。
であれば、アイフォンと同じように機能を持たせようかと思うのですが。
0233デフォルトの名無しさん2012/06/29(金) 16:10:15.91
持たせたらいいじゃない。
0234デフォルトの名無しさん2012/06/29(金) 16:58:13.71
コンピュータの歴史はパクりの歴史だ
いいと思ったら容赦なくパクれ
0235デフォルトの名無しさん2012/06/29(金) 17:44:27.28
パクリじゃないインスパイアだボケ
0236デフォルトの名無しさん2012/06/29(金) 18:12:37.86
アップルってどこまで特許申請してるん?
オーバースクロールは問題になったから知ってるんだが他のUI面で特許あるん?
0237デフォルトの名無しさん2012/06/29(金) 23:58:07.28
Serviceを開始するにはActivity継承クラス内でしかできないのですか?
0238デフォルトの名無しさん2012/06/30(土) 00:08:16.12
Context持たせればどこでも
0239デフォルトの名無しさん2012/06/30(土) 00:22:53.43
公開したアプリを更新する
たびに再課金することってできますか?
0240デフォルトの名無しさん2012/06/30(土) 02:25:53.01
app_name を変えればよろし
0241デフォルトの名無しさん2012/06/30(土) 12:28:52.23
あ
0242デフォルトの名無しさん2012/06/30(土) 12:30:04.49
ああ?
0243デフォルトの名無しさん2012/06/30(土) 12:35:47.74
うおー。WiMAXで書き込み出来てるじゃん!
0244デフォルトの名無しさん2012/06/30(土) 12:54:00.24
それローカルファイルだよ
0245デフォルトの名無しさん2012/06/30(土) 13:10:41.59
早速質問です。曲の再生と曲名を表示させるService(AIDL実装)があるのですが、Widgetでも同じ様に次曲のタイトル等を自動更新させたいのですが、Click時のonUpdateでしか更新する方法が思いつきません。
0246デフォルトの名無しさん2012/06/30(土) 13:12:01.47
おそらくBroadCastさせて情報を送受信させると思うのですが、
美味くコードがかけません。ググりまくっても中々同じ様なsampleが無いので、
どうかお知恵を貸してください。

※久しぶりの2chだったので改行忘れてましたすまそん。
0247デフォルトの名無しさん2012/06/30(土) 13:18:50.04
そのサービス内で曲が変わったときに明示的intent投げれ
でAppWidgetProviderでレシーブしてアップデート
0248デフォルトの名無しさん2012/06/30(土) 13:36:18.28
>>247
なるほロケット。やってみます。
0249デフォルトの名無しさん2012/06/30(土) 17:42:05.18
USB接続でデバッグすると、
PCがフリーズしてしまうのですが、
回避方法とかありませんか?

実機:xperia
PC:dell(i3)/win7
02502462012/06/30(土) 18:34:27.04
>>247
ログから取ってみようと思ったんですけど、それさえ取れません。

サービス側
Intent intent = new Intent(アクション名);
intent.putExtra("KEY", TITLE_NAME);
sendBroadcast(intent);

AppWidgetProvider側

onReceiver(Context context,Intent intent){
if (intent.getAction().equals(アクション名)){
Log.v(TAG,"onReceive");
}
}
}
02512462012/06/30(土) 19:15:46.89
これでも駄目です…。

Service側
  Intent intent = new Intent(Service名.this,AppWidgetProvider名.class);
  intent.putExtra("KEY", TITLE_NAME);
  sendBroadcast(intent);

Widget側
public void onReceive(Context context,Intent intent) {
Log.v(TAG,"onReceive");
Bundle bundle=intent.getExtras();
String text=bundle.getString("KEY");
Log.v(TAG,text);
0252デフォルトの名無しさん2012/06/30(土) 19:32:26.79
マニフェストでプロバイダにintent-filterを追加してないに100ペリカ
02532462012/06/30(土) 20:09:56.16
>>247
251の方法でログ通過してくれました。onReceiveからも無事Updateして
曲名が自動更新出来る様になりました。ありがとうございます。

>>252
アクション以外はマニフェストへのintent-filter追加ってしなくても良いはずじゃ?
とりあえず現時点では追加しなくても動作するようです。
0254デフォルトの名無しさん2012/06/30(土) 21:30:25.01
マニュフェストって何ですか?
0255デフォルトの名無しさん2012/06/30(土) 21:31:52.89
政権公約
0256デフォルトの名無しさん2012/06/30(土) 22:47:46.58
>マニュフェスト
何で最初から全部の権限が許可されていないのかな…
0257デフォルトの名無しさん2012/06/30(土) 23:02:54.01
>>256
それじゃ権限の意味ないだろ
0258デフォルトの名無しさん2012/06/30(土) 23:42:29.77
>>257
ユーザーじゃなくて、
アプリの作者が権限を付加するくらいなら
なくても良いのに、ってこと。
0259デフォルトの名無しさん2012/06/30(土) 23:47:24.54
ん?
開発者側としてはないと困るしょ
0260デフォルトの名無しさん2012/07/01(日) 00:39:38.06
ユーザーからすれば余計なことをしてないのが一目でわかる。
開発者からすれば余計なことをしていないという証明になる。
権限があって困るのはマルウェアを作ろうとしている人だけ。
0261デフォルトの名無しさん2012/07/01(日) 00:43:35.55
まあavast騒動でユーザに一目でわかる知能がないってわかったし
結局見ないなら全許可でもいいよねPCみたく
0262デフォルトの名無しさん2012/07/01(日) 00:46:35.41
複数のアプリに広告を載せる場合、 admobのパブリッシャー IDは同じものを使って良いんですか?
0263デフォルトの名無しさん2012/07/01(日) 01:02:39.97
>>261
わかる人は騒がず、わからない人だけが騒ぐからそう見えるだけ。
権限を気にせず開発がしたいならiPhoneでいいじゃん
0264デフォルトの名無しさん2012/07/01(日) 02:22:10.07
アプリの仕様を弄ってる間にアプリから作った読めない画像ファイルが、ファイルマネージャからは見えないので削除出来ないんですが方法はありますか?
0265デフォルトの名無しさん2012/07/01(日) 02:25:05.64
申し訳ありませんが、質問は日本語でお願い致します
0266デフォルトの名無しさん2012/07/01(日) 04:35:56.55
ファイラーから見えないのになぜ存在するとわかるんだ・・・
0267デフォルトの名無しさん2012/07/01(日) 10:22:02.04
Google検索から直接検索結果を取得して(apiなどを使わずに)いるんですがたまにGooglesorryに出会してしまいます
どうしたらいいでしょうか?
0268デフォルトの名無しさん2012/07/01(日) 11:31:36.54
妖精さん的なものだろ
0269デフォルトの名無しさん2012/07/01(日) 11:36:14.70
>>264
アプリをアンインストールすればいいんじゃね
0270デフォルトの名無しさん2012/07/01(日) 11:40:47.46
アンインストールしたって消えないだろ
0271デフォルトの名無しさん2012/07/01(日) 14:17:51.81
何をどうしたらこんな分かり辛い日本語が書けるのか
0272デフォルトの名無しさん2012/07/01(日) 15:30:54.97
外人が機械翻訳かまして質問してくるほど
ここのレベルの高さが世界に知れ渡っているんだよんなわけない
02732462012/07/01(日) 17:50:37.41
また、一つWidget周りで問題が出てきたので質問させてください。
現在、リストアイテム選択でIDを拾いつつ、サービスを起動してsetDataSource経由で曲を再生しています。
昨日、Widgetを追加したのでonStart後の処理は丁度以下の様になっていて、
曲を選択した後、曲が更新された場合、問題なく動作しています。

サービス側
@Override
public void onStart(Intent intent, int StartId) {

 Widget関連処理ソメッド

  if( ! Widgetのプレイボタンクリック){
setOnCompletionListener(ここで曲情報をWidgetへブロードキャスト)
setDataSource
}
}

02742462012/07/01(日) 17:51:56.39
しかし、今現在、Widgetを画面に追加した直後はWidgetのボタンは無反応で曲情報も反映されません。
それらが使える様になるのは前途の通り、曲を選択した後か曲が切り替わったタイミングのみです。
これをWidgetを追加した後、ボタンが有効になる様に、或は曲が再生されているのであれば、
文字情報を予め表示させるようにしたいのですが、何か良い手は無いでしょうか?
省略しているところもありますが、以下がWidgetProviderでの処理内容となっています。

@Override
public void onReceive(Context context,Intent intent) {
Bundle bundle=intent.getExtras();
AppWidgetManager manager = AppWidgetManager.getInstance(context);
RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.widget);

if(bundle != null){
String title=bundle.getString("曲情報");
}

view.setTextViewText(R.id.text_title,title);
ComponentName widget = new ComponentName(context, Widgetクラス名.class);
manager.updateAppWidget(widget, view);
}
0275デフォルトの名無しさん2012/07/01(日) 18:37:16.51
そもそもremoteViewsにsetOnClickPendingIntentをセットしてあるの?
02762462012/07/01(日) 18:50:11.71
>>275
クリックイベントは全てServiceに登録してます。
Widgetクラスはレシーバーと、onUpdateのサービス起動だけです。
02772462012/07/01(日) 18:55:46.28
>>275

こんな感じになってます。

サービス側
@Override
public void onStart(Intent intent, int StartId) {
AppWidgetManager manager = AppWidgetManager.getInstance(this);
RemoteViews view = new RemoteViews(this.getPackageName(), R.layout.widget);

if (PLAY_CLICK.equals(intent.getAction())) {
mp.start(); or mp.pause();
}

Intent play = new Intent();
play.setAction(PLAY_CLICK);
PendingIntent playPending = PendingIntent.getService(this, 0, play, 0);
view.setOnClickPendingIntent(R.id.button_play, playPending);

ComponentName widget = new ComponentName(this, MusicWidget.class);
manager.updateAppWidget(widget, view);

if (!PLAY_CLICK.equals(intent.getAction())) {
    再生処理メソッド
}
}
0278デフォルトの名無しさん2012/07/01(日) 19:13:52.12
if (!PLAY_CLICK.equals(intent.getAction())) {

この処理がおかしいのでは
クリックがきかないってことはこれがトルーになってるってことじゃね
02792462012/07/01(日) 19:35:12.66
>>278
今ですね。凄い事発見してしまったんですが、
通常、Widgetを画面に追加するとonUpdate呼ばれますよね?
ここのログが出て来ないので、startService()呼べてないのが原因じゃないかと。
ただ、その線も捨てられないのでログとってみます。
02802462012/07/01(日) 21:20:10.88
>>278
onReceiveの処理をメソッドごと削除するとonUpdateが呼ばれる様になり、
ボタンが有効になりました。その代償として曲やアルバムアートなどが表示されなくなりましたけど。
onReceiveがあるとonUpdateが呼ばれないなんてことありませんよね?
もう少し色々やってみます。
0281デフォルトの名無しさん2012/07/01(日) 21:36:24.04
>>280
継承クラスのonReceive内で super.onReceive(context, intent); を呼ぶか
自前で処理しないとonUpdateは呼ばれないよ。AppWidgetProviderのソース見てみ。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r1.2/android/appwidget/AppWidgetProvider.java#AppWidgetProvider.onReceive%28android.content.Context%2Candroid.content.Intent%29
onReceiveでintentのactionを判定してそれぞれonUpdate、onDeleted、onEnabled、onDisabled処理呼ぶという
単純なことやってるだけだから。

毎回継承元ソース見てsuper呼ぶべきかどうか見てるんだけど
皆さんはどうしてるんだろう
02822462012/07/01(日) 22:32:48.30
>>281
つまりAppWidgetProvider内はonUpdateのみにして、
ブロードキャストレシーバーを継承した独自クラスを作り、
その中でonReceiveをすれば良いと言うことでしょうか?
プログラム歴6ヶ月のおっさんには何だかハードルあ高いなぁw
0283デフォルトの名無しさん2012/07/01(日) 22:46:37.25
スレッドつくるとき
(new Thread(new Runnable() {
@Override
public void run() {
//処理
}
}.start();
っていうのがよく載ってるけど
new Runnable()ってなくても動くんだけど
なんのためにあるんでしょう?
■ このスレッドは過去ログ倉庫に格納されています