上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android] targetSdkVersion に該当するSDKが無くてエラー

Eclipseを起動するたびに、ワークスペース内のプロジェクトで以下のエラーが発生している。

Can't find API database; API check not performed XXX 行 1 Android Lint Problem


クリーンアップするとエラーは消えるのだが、気持ち悪いのでしっかりと対応した。
クリーンアップで解消していたのは謎です。。。。


【原因】
targetSdkVersion で指定してるバージョンのSDKが開発環境にインストールしていなかった。

【対応】
Android SDK マネージャーで該当バージョンをインストール。


テーマ : プログラミング
ジャンル : コンピュータ

【CentOS 6.5】 IPアドレスを固定に変更した

CentOS インストール直後のネットワークの設定はDHCPで動的にIPアドレスが割り当てられていた。
ssh接続などなどしているため、意図しないIPアドレスの変更が発生しないように念のため固定に設定した。

ちょっと苦労したのでメモを残しておきます。

■最終的なまとめ
【変更ファイル】
/etc/sysconfig/network-scripts/ifcfg-eth0


【変更内容】
以下を変更。
----------------
① ONBOOT=yes
② BOOTPROTO=static
③ IPADDR=192.168.1.2
④ NETMASK=255.255.255.0
⑤ GATEWAY=192.168.X.X
⑥ DNS1=192.168.X.X
----------------

① 毎回、手動で接続するのは面倒なので自動起動するように none ⇒ yes に変更
② 固定アドレスにするため値を dhcp ⇒ static に変更
③ 固定するIPアドレスを追加
④ ネットマスクを追加
⑤ デフォルトゲートウェイを追加
⑥ DNSサーバーのアドレスを追加


【変更の反映】
networkを再起動する(以下コマンド)

$ service network restart


【変更されていることを確認】
ifconfig コマンドを打って、IPアドレス(inet addr)が変更されていることを確認する(以下コマンド)

$ ifconfig


■苦戦した内容
【⑥の追加漏れによりインターネットにつながらなかった】

"/etc/resolv.conf" にDNSのアドレスを設定する必要があるのだが、"resolv.conf" に直接以下の1行を追記しても network を再起動したタイミングで追記した内容が消えてしまう。

nameserver 192.168.X.X

原因は、、、CentOS6からは、以下のファイルにDNSのアドレスを記載しないといけないらしい。

/etc/sysconfig/network-scripts/ifcfg-eth0

上記ファイルに以下のように記載すると、network の再起動時に自動的に "resolv.conf" にも反映される。

DNS1=192.168.X.X



【Android】MediaPlayer で再生しようとしたらファイル読み込みに失敗

MediaRecorder を使用して、端末のアプリケーション専用の保存領域(Context.getFilesDir().getPath())に

音声ファイルを保存したのち、その保存した音声ファイルを MediaPlayer で再生しようとしたら以下のエラーが発生した。

04-23 10:02:41.199: E/Astros(861): playing. : java.io.IOException: Prepare failed.: status=0xFFFFFFFC



実装は以下のような感じ

MediaPlayer player = new MediaPlayer();
try {
// 再生ファイルをセット
player.setDataSource(getFilesDir().getPath() + "/sample.3gp");
player.prepare(); // 再生準備
player.start(); // 再生開始
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


【原因】
MediaPlayer にはアプリケーション専用の保存領域にアクセスする権限が無いことのようです。

※ちなみに、エミュレータの場合、上記の実装(MediaPlayer にファイル直指定)でも怒られずに再生できた。

 端末依存なのか?root権限がある端末なら問題ないのか?



【解決策】
FileInputStream を使って開いて、FileDescriptor を取得し、setDataSource() には FileDescriptor をセットすることで
MediaPlayer が直接ファイルを開くのを回避することができます。


MediaPlayer player = new MediaPlayer();
FileInputStream fis = null;
try {
// 再生ファイルをセット
fis = new FileInputStream(new File(getFilesDir().getPath() + "/sample.3gp"));
FileDescriptor fd = fis.getFD();
player.setDataSource(fd);
player.prepare(); // 再生準備
player.start(); // 再生開始
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

MediaRecorder、MediaPlayer を使用した録音/再生は、大抵SDカードへ保存するようにするため、
MediaPlayer がアプリケーション領域にアクセスできないことは不自由とされていないのかな。
FileInputStream で回避もできますしね。


以下のサイトを参考にさせていただきました。
http://www.anddev.org/media_player_prepare_error-t4309.html

[Android] カメラプレビューでフラッシュを点灯

Androidのカメラプレビュー表示時に、フラッシュライトを点灯させるためには以下のようにパラメータをセットすれば実装できる。


// カメラパラメータを取得
Camera.Parameters params = mCamera.getParameters();
// フラッシュモードを点灯に設定
params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
// カメラインスタンスにパラメータを設定
mCamera.setParameters(params);


フラッシュのパラメータについては以下のようになっている。



FLASH_MODE_AUTO Flash will be fired automatically when required.
FLASH_MODE_OFF Flash will not be fired.
FLASH_MODE_ON Flash will always be fired during snapshot.
FLASH_MODE_RED_EYE Flash will be fired in red-eye reduction mode.
FLASH_MODE_TORCH Constant emission of light during preview, auto-focus and snapshot.

Developersサイトより



ただ、セットするタイミングを間違えると例外が発生して、アプリが落ちてしまう。。。
以下の後にパラメータを設定すれば例外は起きなかった。

mCamera.startPreview();


また、端末によってはサポートしているパラメータが異なる(不足している)ようなのでターゲット端末を考慮する必要がある。


[コマンドプロンプト] msgコマンドでメッセージ送信

コマンドプロンプトのコマンドで、ネットワークを通じて相手にメッセージ(ポップアップ表示)を行うコマンドがあります。

Windows XPまでは、 "net send" コマンドで送ることも可能でしたが、Windows Vista 以降はsendオプションが無くなっているので、"msg" コマンドを使用します。
(XPは、先日サポートが切れたので今後は "msg" コマンドが一般的ですかね)

msgコマンドの構文とオプションは以下で一覧化されているので、そちらを参照。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230564/?ST=win


■入力形式

  msg ユーザ名 メッセージ

 で指定したユーザにメッセージをポップアップ表示することが可能。

  msg ユーザ名 < ファイル名

 とすれば、ファイルの内容を指定したユーザに表示することもできる。


また、ユーザ名に "1" を指定すると、自分にポップアップを表示する。

> msg 1 テストメッセージを送信します!!

msgコマンド

[linux] adminグループにユーザを追加する

adminグループにユーザを追加/削除するコマンドをメモ。

★追加するコマンド
$ sudo gpasswd -a ユーザ名 admin

★削除するコマンド
$ sudo gpasswd -d ユーザ名 admin

★adminグループに所属するユーザを確認
$ grep admin /etc/group
もしくは
$ cat /etc/group | grep admin


フレームの子のペインでparentで親フレームを参照使用とした場合、Chromeではうまく動かないことがある

■親のフレーム

<frameset cols="220,*" id="index_main">
<frame name="xxx" src="sample1.html">
<frame name="yyy" src="sample2.html">
</frameset>


■子のHTMLのjavascriptに以下のようなコードを指定

//親でidに"index_main"が指定されているフレームを取得
var $element = parent.document.getElementById("index_main");


この実装、Chromeブラウザで動かすと動かないことがある。

ただし、動かないのはローカル環境のみである。
サーバにアップして、参照した場合はいい具合に動作する。

Chromeブラウザでは、セキュリティー上の関係で
ローカルではうまく動かないようになっているらしいが、
ブラウザ起動時にオプションを指定することで
ローカルでも動作するようになるらしい。

【参考サイト】
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1278218187

https://productforums.google.com/forum/#!category-topic/chrome-ja/%E5%95%8F%E9%A1%8C%E3%81%AE%E5%A0%B1%E5%91%8A/Caw2PgHi9rQ


プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。