2013年3月26日火曜日

JellyBeanの暗黙的Intent

Jelly Beanでは、暗黙的Intentのアクティビティの表示はグリッド表示になってますね。

今まではリスト表示だったから、いきなりだと違和感だよね。
でも、スクロールの距離が短くなるからこっちのほうが視認性がよいのかな?

「常にこのアプリを使用する」的なチェックボックスは「常時」ってボタンに。
アプリを選択して起動するときは「1回のみ」ってボタン。

なんか「1回のみ」っていう日本語訳が気に入ってない私。

「今回のみ」とか「起動」とかのほうがいいですね。


 

2013年3月22日金曜日

uses-permissionとuses-featureに気をつけよ!

<uses-permission>と<uses-feature>に気をつけよ!

なぜかって言うと、<uses-feature>って、勝手に付与される場合があるからです!

例えばBluetooth使いたいから以下のパーミッションつけるとすると、



<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />


↓が自動的に付与されます!


<uses-feature android:name="android.hardware.bluetooth"/>


Bluetoothを使いますよー!Bluetooth使えない端末は門前払いします!
ってな感じ。

Bluetoothを使う前提のアプリならいいけど、Bluetooth使える場合だけ使いたいです!ってときには困っちゃいます。

なので、Bluetoothは必ずは必要としませんよー!って書いてあげましょう。


<uses-feature android:name="android.hardware.bluetooth" android:required="false" />


そうしないと、意味もなく使えない端末がでてきてしまう。。





久しぶりにAndroidでOpenCV使おうと思ったのだが・・・

久しぶりにAndroidでOpenCV使おうと思ったのだが・・・ 
適当に.jarファイルをビルドパスにいれたり、
Javaのビルドパスにプロジェクトいれたりして、 何で動かないんだ???って。



 E/AndroidRuntime(4306): java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.highgui.Highgui.imread_1:(Ljava/lang/String;)J


 E/AndroidRuntime(5154): java.lang.NoClassDefFoundError: org.opencv.highgui.Highgui


やり方が違うのを忘れてました。


設定はこっちでしたね。

[プロジェクトのプロパティ]→[Android]→[ライブラリー]→[追加]

ライブラリーって項目が下のほうに隠れてるので、見落とし。

よかったよかった。。。


まぁ、これこれで忘れてだけだし、動いたからいいのだが、
バージョンアップしてたOpenCV使う落としたら、


 E/AndroidRuntime(8230): java.lang.ExceptionInInitializerError

 E/AndroidRuntime(11556): java.lang.NoClassDefFoundError: org.opencv.android.OpenCVLoader


なにやら初期化が必要なようで、
OpenCVLoaderの初期化するやつをサンプルみて加えたけど、

それでも動かないよ・・・。
GooglePlayのOpenCVMnagerも入れてるよ。。。


仕方ないので、バージョン2.4.3は保留で2.4.1を組み込んでみてる。

なんで動かないんでしょうね。エラー吐かないで急に落ちるんだけど・・・。

まぁ、後で解決します。

2013年3月13日水曜日

縦スクロールバーさんをどかしましょう。

SyntaxHighlighterで縦スクロールバーの必要性がないと思った。
とういうわけで、消しましょうか。


 <link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
 <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeEclipse.css' rel='stylesheet' type='text/css'/>
 <style>
 <!--
  .syntaxhighlighter {
    overflow-y: hidden !important;
    padding: 1px !important;
  }
 -->
 </style>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/>
 <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
 <script language='javascript' type='text/javascript'>
  SyntaxHighlighter.config.bloggerMode = true;
  SyntaxHighlighter.all();
 </script>

ミニブラウザでyoutube見ると画面真っ暗?

前書いたやつの転載。


ICSでミニブラウザ使って、
Youtube見に行くと






てな感じで真っ暗で音だけ聞こえるみたいで、残念な感じになってしまう。。。
ぐはぁ。

GBのときと違ってWebView内で動画再生しようとしてるみたいです。

そんなときは、↓



赤丸のフルスクリーンボタン?みたいのを押していただけると、
動画をフローティングさせますよ!!









Chiee!ミニブラウザ


Androidのアニメーション。くるくるっと。

Androidのアニメーション。


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="#ff000000" android:shareInterpolator="false" android:zAdjustment="top">
        
    <translate 
        android:fromXDelta="0%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="50%"
        android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
        android:startOffset="0" android:duration="100"
        />    
         
    <scale android:fromXScale="1.0" android:toXScale="0.0"
            android:fromYScale="1.0" android:toYScale="0.0"
            android:pivotX="50%" android:pivotY="50%"
            android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
            android:startOffset="100"
            android:duration="1000" />
    
    <alpha android:fromAlpha="1.0" android:toAlpha="0.5"
            android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
            android:startOffset="100"
            android:duration="1000"/>

    <rotate 
        android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true"
        android:fromDegrees="0" android:toDegrees="720"
        android:pivotX="50%" android:pivotY="50%" 
        android:startOffset="100" android:duration="1000"
        />   
        
</set>

BluetoothChatを使ってみましょうか!

AndroidのBluetoothAPIの使い方のサンプルコードであるBluetoothChat。


初期画面

メニューボタンを押すと。
ペアリングしてない場合、ペアリングする必要あがる!
まず一番下のメニューを押すと自分が検索してもらう状態になる。

ここではいを押すと検索してもらえる。

相手側では1番目か2番目のメニューで相手を探します!

無事接続できれば、メッセージ交換できるよ!

メッセージ入力

相手から送られてきた!

相手側も同様

ペアリングは標準の設定アプリのBluetoothの箇所でもできます。


AndroidでのBluetooth通信では、まずペアリングを明示的にユーザに操作してもらって行う必要があります。
バックグランドで自動でペアリングとかは仕様上は無理なので、すれ違い通信とかを行うことは難しいですね。
ペアリングさえすればバックグランドで接続できます。

ペアリングを行うところもアプリに含まれてたけど、設定あぷりでもできるので、自分で作るのは面倒なときは設定アプリがあるから省略して大丈夫ですね。

BluetoothChatのサンプルコードが若干雑なつくりのような?
問題なく動いてるけど、いろいろ問題があるきがするのだが・・・・。
まぁサンプルだから、これにそんなに時間をかけられなかったのかな。
きっと忙しいでしょしね。あるだけ感謝しなくてはね。

というわけで、Bluetooth