Androidプログラミング質問スレ Part23
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/06/19(火) 19:57:12.12※プログラミング自体が初めて!なあなたには↓↓↓こちらへ
スレ立てるまでもない質問はここで 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/
0205デフォルトの名無しさん
2012/06/27(水) 09:47:20.80EditTextを気合で並べるか、グラフィック(?)で描画するくらいしか方法はないですか?
CodeZineのDBGridを使ってみたけど列と行が大量にあるとだめぽお・・・
0206デフォルトの名無しさん
2012/06/27(水) 09:50:19.250207デフォルトの名無しさん
2012/06/27(水) 09:56:35.62再利用する方法を使います。
ありがとうございます。
0208201
2012/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.54http://www.dotup.org/uploda/www.dotup.org3136556.png
0210デフォルトの名無しさん
2012/06/27(水) 14:16:52.060211デフォルトの名無しさん
2012/06/27(水) 15:54:33.58以前の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.91Intentのこと?
0214デフォルトの名無しさん
2012/06/27(水) 23:09:28.240215デフォルトの名無しさん
2012/06/27(水) 23:18:00.650216デフォルトの名無しさん
2012/06/28(木) 00:16:42.10楕円にこういうグラデーション掛けるのどうすればいい?
RadialGradientは円なら描けるけど
円で描画してから変形するんじゃなくて直接的に楕円で描く方法ってある?
0217デフォルトの名無しさん
2012/06/28(木) 00:21:26.390218デフォルトの名無しさん
2012/06/28(木) 01:16:24.070219デフォルトの名無しさん
2012/06/28(木) 09:19:31.36これを出ないようにするか、これのコピーを検知する方法はないでしょうか。
0220デフォルトの名無しさん
2012/06/28(木) 17:25:28.91startActionModeをオーバーライドしてnullを返せば抑止できた気がする
0221デフォルトの名無しさん
2012/06/28(木) 21:04:28.89本当はアプリ自体を終了させたいのですが。。
ちなみにActivityBで動いている処理は、onPause()のタイミングで全て止めています
0222デフォルトの名無しさん
2012/06/28(木) 21:09:28.59ActivityBでfinish()してないからじゃね
0224デフォルトの名無しさん
2012/06/28(木) 21:13:21.52http.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();
こんな感じに普通に途中で切ってしまっても大丈夫なんでしょうか?
0226デフォルトの名無しさん
2012/06/28(木) 22:09:30.930227デフォルトの名無しさん
2012/06/28(木) 22:10:49.900228デフォルトの名無しさん
2012/06/28(木) 23:25:12.990229デフォルトの名無しさん
2012/06/29(金) 00:16:35.15webviewのスクロールに合わせてタイトルバーもスクロール(下にスクロールすると隠れる)するのはどう実現しているのでしょうか?
LinearLayOutでタイトル+webview+メニューで順番に配置した場合
タイトルバーはwebviewのスクロールに合わせて移動してくれません・・・
0230デフォルトの名無しさん
2012/06/29(金) 08:29:23.93わざわざ、指摘してるのに
「それはちゃんとやってますから」とか自慢げにいうやつってなんなんだろうね。
「ちゃんと作ったのに動きません」とかさ。
いや、ちゃんと作ってないから動いてないんだよ。
プログラムは作った通りにしか動かない
これ分かってない奴多すぎだろ
(あぁ、コンパイラのバグとかは除いてw)
0231デフォルトの名無しさん
2012/06/29(金) 08:48:37.51RelativeLayoutで重ねて置けばおk
0232デフォルトの名無しさん
2012/06/29(金) 14:56:02.27従来のメニュー・処理を常に押せるように表示しておけってことですよね。
ぶっちゃけこれってアイフォンのパクリってことでいいんでしょうか。
であれば、アイフォンと同じように機能を持たせようかと思うのですが。
0233デフォルトの名無しさん
2012/06/29(金) 16:10:15.910234デフォルトの名無しさん
2012/06/29(金) 16:58:13.71いいと思ったら容赦なくパクれ
0235デフォルトの名無しさん
2012/06/29(金) 17:44:27.280236デフォルトの名無しさん
2012/06/29(金) 18:12:37.86オーバースクロールは問題になったから知ってるんだが他のUI面で特許あるん?
0237デフォルトの名無しさん
2012/06/29(金) 23:58:07.280238デフォルトの名無しさん
2012/06/30(土) 00:08:16.120239デフォルトの名無しさん
2012/06/30(土) 00:22:53.43たびに再課金することってできますか?
0240デフォルトの名無しさん
2012/06/30(土) 02:25:53.010241デフォルトの名無しさん
2012/06/30(土) 12:28:52.230242デフォルトの名無しさん
2012/06/30(土) 12:30:04.490243デフォルトの名無しさん
2012/06/30(土) 12:35:47.740244デフォルトの名無しさん
2012/06/30(土) 12:54:00.240245デフォルトの名無しさん
2012/06/30(土) 13:10:41.590246デフォルトの名無しさん
2012/06/30(土) 13:12:01.47美味くコードがかけません。ググりまくっても中々同じ様なsampleが無いので、
どうかお知恵を貸してください。
※久しぶりの2chだったので改行忘れてましたすまそん。
0247デフォルトの名無しさん
2012/06/30(土) 13:18:50.04でAppWidgetProviderでレシーブしてアップデート
0248デフォルトの名無しさん
2012/06/30(土) 13:36:18.28なるほロケット。やってみます。
0249デフォルトの名無しさん
2012/06/30(土) 17:42:05.18PCがフリーズしてしまうのですが、
回避方法とかありませんか?
実機:xperia
PC:dell(i3)/win7
0250246
2012/06/30(土) 18:34:27.04ログから取ってみようと思ったんですけど、それさえ取れません。
サービス側
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");
}
}
}
0251246
2012/06/30(土) 19:15:46.89Service側
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.790253246
2012/06/30(土) 20:09:56.16251の方法でログ通過してくれました。onReceiveからも無事Updateして
曲名が自動更新出来る様になりました。ありがとうございます。
>>252
アクション以外はマニフェストへのintent-filter追加ってしなくても良いはずじゃ?
とりあえず現時点では追加しなくても動作するようです。
0254デフォルトの名無しさん
2012/06/30(土) 21:30:25.010255デフォルトの名無しさん
2012/06/30(土) 21:31:52.890256デフォルトの名無しさん
2012/06/30(土) 22:47:46.58何で最初から全部の権限が許可されていないのかな…
0257デフォルトの名無しさん
2012/06/30(土) 23:02:54.01それじゃ権限の意味ないだろ
0258デフォルトの名無しさん
2012/06/30(土) 23:42:29.77ユーザーじゃなくて、
アプリの作者が権限を付加するくらいなら
なくても良いのに、ってこと。
0259デフォルトの名無しさん
2012/06/30(土) 23:47:24.54開発者側としてはないと困るしょ
0260デフォルトの名無しさん
2012/07/01(日) 00:39:38.06開発者からすれば余計なことをしていないという証明になる。
権限があって困るのはマルウェアを作ろうとしている人だけ。
0261デフォルトの名無しさん
2012/07/01(日) 00:43:35.55結局見ないなら全許可でもいいよねPCみたく
0262デフォルトの名無しさん
2012/07/01(日) 00:46:35.410263デフォルトの名無しさん
2012/07/01(日) 01:02:39.97わかる人は騒がず、わからない人だけが騒ぐからそう見えるだけ。
権限を気にせず開発がしたいならiPhoneでいいじゃん
0264デフォルトの名無しさん
2012/07/01(日) 02:22:10.070265デフォルトの名無しさん
2012/07/01(日) 02:25:05.640266デフォルトの名無しさん
2012/07/01(日) 04:35:56.550267デフォルトの名無しさん
2012/07/01(日) 10:22:02.04どうしたらいいでしょうか?
0268デフォルトの名無しさん
2012/07/01(日) 11:31:36.540269デフォルトの名無しさん
2012/07/01(日) 11:36:14.70アプリをアンインストールすればいいんじゃね
0270デフォルトの名無しさん
2012/07/01(日) 11:40:47.460271デフォルトの名無しさん
2012/07/01(日) 14:17:51.810272デフォルトの名無しさん
2012/07/01(日) 15:30:54.97ここのレベルの高さが世界に知れ渡っているんだよんなわけない
0273246
2012/07/01(日) 17:50:37.41現在、リストアイテム選択でIDを拾いつつ、サービスを起動してsetDataSource経由で曲を再生しています。
昨日、Widgetを追加したのでonStart後の処理は丁度以下の様になっていて、
曲を選択した後、曲が更新された場合、問題なく動作しています。
サービス側
@Override
public void onStart(Intent intent, int StartId) {
Widget関連処理ソメッド
if( ! Widgetのプレイボタンクリック){
setOnCompletionListener(ここで曲情報をWidgetへブロードキャスト)
setDataSource
}
}
0274246
2012/07/01(日) 17:51:56.39それらが使える様になるのは前途の通り、曲を選択した後か曲が切り替わったタイミングのみです。
これを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.510276246
2012/07/01(日) 18:50:11.71クリックイベントは全てServiceに登録してます。
Widgetクラスはレシーバーと、onUpdateのサービス起動だけです。
0277246
2012/07/01(日) 18:55:46.28こんな感じになってます。
サービス側
@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この処理がおかしいのでは
クリックがきかないってことはこれがトルーになってるってことじゃね
0279246
2012/07/01(日) 19:35:12.66今ですね。凄い事発見してしまったんですが、
通常、Widgetを画面に追加するとonUpdate呼ばれますよね?
ここのログが出て来ないので、startService()呼べてないのが原因じゃないかと。
ただ、その線も捨てられないのでログとってみます。
0280246
2012/07/01(日) 21:20:10.88onReceiveの処理をメソッドごと削除するとonUpdateが呼ばれる様になり、
ボタンが有効になりました。その代償として曲やアルバムアートなどが表示されなくなりましたけど。
onReceiveがあるとonUpdateが呼ばれないなんてことありませんよね?
もう少し色々やってみます。
0281デフォルトの名無しさん
2012/07/01(日) 21:36:24.04継承クラスの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呼ぶべきかどうか見てるんだけど
皆さんはどうしてるんだろう
0282246
2012/07/01(日) 22:32:48.30つまりAppWidgetProvider内はonUpdateのみにして、
ブロードキャストレシーバーを継承した独自クラスを作り、
その中でonReceiveをすれば良いと言うことでしょうか?
プログラム歴6ヶ月のおっさんには何だかハードルあ高いなぁw
0283デフォルトの名無しさん
2012/07/01(日) 22:46:37.25(new Thread(new Runnable() {
@Override
public void run() {
//処理
}
}.start();
っていうのがよく載ってるけど
new Runnable()ってなくても動くんだけど
なんのためにあるんでしょう?
0284デフォルトの名無しさん
2012/07/01(日) 22:47:41.49あーちがう、
>>280の「onReceiveの処理をメソッドごと削除する」前の段階のソースで
onReceiveの冒頭にsuper.onReceive(context, intent);入れるだけで意図通り動くと思うよ。
ちょっと回りくどかった
0285デフォルトの名無しさん
2012/07/01(日) 22:51:55.64−WidgetProvider側
−onUpdate()
// ここでウィジェットのボタンにpendingIntent設定
// PlaybackServiceからカレント曲情報をもらってwidgetを更新
−onReceive()
if("jp.hoge.updateStatus".equals()){
// ここでサービスからのIntentを受け取ってbundleから曲情報を取得してウィジェットを更新
// 再度PendingIntentを設定(ウィジェット更新するたびにこれやらないとダメだった希ガス)
}
−PlaybackService側
−onStart();
// 再生処理とか停止処理を行う。
// 再生状態(再生中か停止中か)、シャッフルの状態、リピートの状態、再生してる曲情報などをBundleにくっつけて
// アクションを「jp.hoge.updateStatus」にしてIntentを飛ばす→WidgetProviderで更新処理
−マニフェスト
−WidgetProviderのところにIntent-Filterを設定 例:jp.hoge.updateStatus
0287デフォルトの名無しさん
2012/07/02(月) 00:13:13.07なくても動くの意味がわからないけど。
まずrunableを動くように作って、それからthread化しない? それとweb serverとか考えるとrunableをclient数分だけthreadにするでしょう。
0288246
2012/07/02(月) 00:17:40.55リストとVIewPagerのスクロール速度がかなり重くなっています。
それが重くなったのはアルバムにアルバムアートのサムネイルを割り当ててからです。
処理的には起動時にqueryでALBUM名取得→ALBUM_ID取得→ALBUM_ARTを各アルバム毎に実行して、
リストを表示するようになっているのが原因と思われます。
これでは遅いのでART情報のUrlをDB化してリストに貼付けていたのですが、
MediaScanで取得された更新分だけをDBにinsartする方法が分からず、元に戻してしまいました。
ググりまくってStack Overflowとかも何度も除いてみたのですが、いい方法が見つかりませんでした。
何かいい方法ありますか?
0289デフォルトの名無しさん
2012/07/02(月) 00:21:25.32これだと無駄に時間がかかるような気がします
もっと効率的な方法はないでしょうか?
0290デフォルトの名無しさん
2012/07/02(月) 00:57:32.09スクロールの速度を早くしたいだけなら
アルバムアートの読み込みをThread化するがよい
「Listview 非同期 画像」あたりでググると参考いっぱい
0291246
2012/07/02(月) 01:08:45.00ありがとうございます。ググってみます!
それと少し説明不足なところもあったので補足させていただきますと、
起動時間も早くしたいので、出来ればMediaScanで追加されたアルバムアートや曲データの
差分情報を取得する方法などのアイデアなどもあれば知りたいです。
アルバム数が100枚を超えると、その取得に1〜2分位、毎回起動時に要してしまうので。
0292デフォルトの名無しさん
2012/07/02(月) 01:12:52.95(new Thread() {
public void run() {
//処理
}
}.start();
って書き方はなにか間違ってる?
自分でなにがわからないのかわからない状態なのかも
0293デフォルトの名無しさん
2012/07/02(月) 01:20:37.85MediaStoreってどんな構造なんだっけ?と思ってみてみたけど
MediaStore.MediaColumnsのDATE_ADDEDとDATE_MODIFIED
辺りで条件判定して取り出せばいいんじゃないの?
0294デフォルトの名無しさん
2012/07/02(月) 01:20:39.19ん? アプリ起動時にアルバム情報とアートを全取得してるの?
CursorAdapter使えばいいんじゃなかろうか
0295デフォルトの名無しさん
2012/07/02(月) 01:24:38.34Threadはクラス、Runnableはインターフェイス
「Thread Runnable 違い」ででもggr
0296デフォルトの名無しさん
2012/07/02(月) 07:35:22.15class service implements runable{
}
service servive=new service();
while(connect())new thread(service).start();
とかいう使い方を基本として考えて設計されたから、そういう使われ方が多いんじゃないかってことだ。
0297デフォルトの名無しさん
2012/07/02(月) 11:44:42.41多くのサンプルをネットで見させて頂いたのですが、基本的に呼び出し方法が
ソース内で宣言するタイプにHandlerを記載するタイプしか見当たりませんでした。
new Thread(new Runnable() {
}
0298デフォルトの名無しさん
2012/07/02(月) 11:56:27.350299246
2012/07/02(月) 12:45:00.44おお、データベース化出来そうな雰囲気ですね。
>>294
そうなんですよ。差分の取得方法が分からないので、
現在は起動時に全読み込みに戻してしてしまってます。
CursorAdapterも調べてみますね。ありがとうございます。
0300デフォルトの名無しさん
2012/07/02(月) 13:12:40.57SPモードメールがプッシュ型のメール受信を行っているとのことで、
ttp://android-inf.com/archives/501
のページを参考に、WAP_PUSH_RECEIVEDをonReceiveで受信するように
BroadcastReceiverを継承したクラスを作成したのですが、インテント
を受信できませんでした。
※ネットワーク変更などのインテントは受信できていることは確認
しているので、フィルターだけの問題かとおもっています。
SPモードメールのインテント受信を行うには、どのintent-filterを
指定すればよいでしょうか?
使用端末:sh-01d
android :2.3.5
0301297
2012/07/02(月) 13:18:06.19インターネット上にあるサンプルだと大体が、ソース内でThreadを作ってそこにThradの中身を書いておりますが
個人的には分けたいと思っています。
その場合こう書けばいいのでしょうか?
//呼び出し
class main {
ThreadClass tc = new ThreadClass();
}
//スレッド
public class ThreadClass extends Thread implements Runnable
{
Handler hi = new Handler();
public void run()
{
hi.post(new Runnable() {
public void run () {
//処理
}
});
}
}
自分で確かめた結果だと現状Looper.prepare()部分でnot called呼ばれてないエラーが出てるので書き方として
あってるかが分からない現状です。
開発媒体がProcessingなので中々…
0302297
2012/07/02(月) 13:20:22.91Handlerをnewする時にLooper.getMainLooper()を渡してやれば良いみたいです。
書き方としては問題ありませんでした
0303デフォルトの名無しさん
2012/07/02(月) 13:25:47.690304デフォルトの名無しさん
2012/07/02(月) 13:28:12.340305デフォルトの名無しさん
2012/07/02(月) 13:44:56.66■ このスレッドは過去ログ倉庫に格納されています