パソコンを操作できるあの「RealVNC Viewer」が無料になったよ

多分、いまどき、ほとんどの人が、WiFiルーターを持ってるのだろうと思います。

「ローカルでプライベートなLAN」とかすでに個人で知ってか知らずか構築して利用していることでしょう。

そのあなた個人のネットワーク内のパソコンをAndroid端末から視覚的に操作できるVNCのクライアントである本家「RealVNC」のクライアント「ReanVNC Viewer」が、$0.99 から 無料になっております。

VNC_Viewer_-_Android_Apps_on_Google_Play

VNC Viewer - Android Apps on Google Play

これまでも、リモートからPCデスクトップを操作するクライアントアプリはいくつかありましたが、操作性や機能の面でもこれが最強のクライアントアプリといえると思われます。

nexusae0_33_thumb1

この画面を見てみるとこんなかんじに。

20140123-080339

操作も非常に使いやすくなっています。

続きを読む >>


Android 4.5 で root なアプリが使えなくなったときのために

20140122-173610

実際はどうなるのか。

1週間ほど前にAOSPのMasterツリーで行われた2つのコミットによって、/data配下のunconfinedドメイン(SELinuxによって制限されないプロセス)のアプリからSupersuerを実行できなくなってしまうというのです。これにより、/dataパーティションのrootアプリから、Superuser権限のコマンドを実行することができなくなってしまいます。

Android 4.5?Android 5.0?で現行のrootアプリとの互換性が失われる可能性大 | juggly.cn Android 4.5?Android 5.0?で現行のrootアプリとの互換性が失われる可能性大 | juggly.cn

開発中のAndroid OS のコードの中に「root排除方向な記述があった」ということのようです。

そのうち、rootedなアプリが使えなくなったときのために、関連ページをまとめておこうか、と。

続きを読む >>


AsyncTaskLoader の使い方 (6/8) 〜 いろいろな Loader の使用例

AsyncTaskLoader___Android_Developers

AsyncTaskLoader | Android Developers


目次

1. Thread と AsyncTask
2. AsyncTaskLoader の利点
3. LoaderManager の利用
4. よくある間違いと回避法
5. 基本的な Loader の実装
6. いろいろな Loader の使用例
7. データベースと CursorLoader
8. Loader の弱点を克服する


6. いろいろな Loader の使用例

代わりにグローバルなキャッシュ利用する

public abstract class GlobalCacheLoader<T> extends AsyncTaskLoader<T> { 
    ... 
    @Override 
    protected void onStartLoading() { 
        T cachedResult = getCachedResult(); 
        if (cachedResult != null) { 
            // 結果が利用可能であればすぐに配送
            deliverResult(cachedResult); 
        }
        if (takeContentChanged() || cachedResult == null) { 
            // 最終読み込み時のデータが変更されているか、
            // または、利用不可(null)の場合
            forceLoad(); 
        } 
    } 
    ... 
    protected abstract T getCachedResult(); 
}

データ監視部分

* onContentChanged() 
    Loader が開始されていたら forceLoad()、停止していたら フラグをセット。 
* takeContentChanged() 
    フラグの値を返して、クリアする。 
@Override 
protected void onStartLoading() { 
    if (mResult != null) { 
        deliverResult(mResult); 
    }
    if (takeContentChanged() || mResult == null) { 
        forceLoad(); 
    } 
}

続きを読む >>