2015年8月31日月曜日

【アプリ開発】アプリのショートカットを作成

しばらくぶりの更新となってしまいましたが、
アプリのショートカットの作成方法について書いていきたいと思います。
更新が不定期ですいませんm(_ _)m


データフォルダアプリでもアプリのショートカットを作成する方法を用いて対応していますので、
今回その点について関数にまとめたりしたのでサンプルコードとして紹介しておきたいと思います。

❏パーミッション


必要なパーミッションは、アプリからショートカットを作成するためのパーミッションを追加します。
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"></uses-permission>

もしアプリからショートカットを削除する場合には、次のパーミッションも追加しておきます。
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"></uses-permission>


❏サンプルコード

このコードは、ギャラリーからintentで画像を取得して、取得した画像でショートカット作成を行うサンプルコードになります。
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
  if(requestCode == REQUEST_GALLERY && resultCode == RESULT_OK)
  {
   try {
    InputStream in = getContentResolver().openInputStream(data.getData());
    Bitmap img = BitmapFactory.decodeStream(in);
    in.close();
    // 選択した画像をアイコン(ショートカット)として追加
    shortcutAdd(getString(R.string.app_name), img);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }

 }

 /*********************************************************************
  * アイコン(ショートカット)の作成
  *********************************************************************/
 private void shortcutAdd(String name, Bitmap bmp)
 {
  // Delete Shortcut
  shortcutDel(name);

  // Intent to be send, when shortcut is pressed by user ("launched")
  Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
  shortcutIntent.setClassName(this, MainActivity.class.getName());

  Bitmap scaledBitmap = Bitmap.createScaledBitmap(bmp, 128, 128, true);

  // Decorate the shortcut
  Intent addIntent = new Intent();
  addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
  addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
  addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, scaledBitmap);
  //addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

  // Inform launcher to create shortcut
  addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
  sendBroadcast(addIntent);
 }

 /*********************************************************************
  * アイコン(ショートカット)の削除
  *********************************************************************/
 private void shortcutDel(String name)
 {
  // Intent to be send, when shortcut is pressed by user ("launched")
  Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
  shortcutIntent.setClassName(this, MainActivity.class.getName());

  // Decorate the shortcut
  Intent delIntent = new Intent();
  delIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
  delIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);

  // Inform launcher to remove shortcut
  delIntent.setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
  sendBroadcast(delIntent);
 }

ショートカットの作成には"com.android.launcher.action.INSTALL_SHORTCUT"のIntentを
ブロードキャスト送信することで行います。
ブロードキャスト送信に渡すIntentには各情報をputExtraで渡して設定します。
Intent.EXTRA_SHORTCUT_INTENTには、作成するショートカットアイコンのclassを設定したIntentを渡します。
Intent.EXTRA_SHORTCUT_NAMEには、作成するショートカットの名前のStringを渡します。
Intent.EXTRA_SHORTCUT_ICONには、作成するショートカットアイコンのBitmapを渡します。
Intent.EXTRA_SHORTCUT_ICON_RESOURCEを使用すれば、リソース(Parcelable)を渡すことでも
作成するショートカットアイコンの設定が可能です。

Intent.EXTRA_SHORTCUT_ICONでBitmapを渡す際は、サイズが大きすぎると設定されないため、アイコンサイズを128x128位に設定しています。

ショートカットの削除する場合には"com.android.launcher.action.UNINSTALL_SHORTCUT"のIntentをブロードキャスト送信することで行います。

❏その他

今回のサンプルコードはショートカットのアイコンをギャラリーから選択して好きなアイコンに設定して作成できるものを
想定しています。

アプリのアイコンについて動的に変更させたいと思っていたのですが、
アプリのアイコンの指定はAndroidManifest.xmlで行われているため、アプリが動作している最中に
直接編集することはできないため、動的な変更は無理であることがわかりましたΣ(゚Д゚)
その代替案として、ショートカットを作成することで対応できる場合もあるかなと思います。

2014年11月19日水曜日

【アプリ開発】ライブラリ導入-JazzyViewPager

今回新しいアプリを作成中で、そのアプリに新規にライブラリを導入してみましたので紹介していきます(^o^)/

ページを左右にフリックする際に様々なエフェクトを追加できるライブラリです。


❏JazzyViewPager


ページ切替の際に色々と効果を入れてみたいと思っていましたが手を出せずにいましたので、
まずはライブラリで試していきたいと思います(^^ゞ

エフェクト一覧(TrasitionEffect)

全部で12種類あるようです。
設定でそれぞれ切り替えれるようにしてみましたので、それぞれのイメージも載せていきます。
  1. Standard
  2. Tablet
  3. CubeIn
  4. CubeOut
  5. FlipVertical
  6. FlipHorizontal
  7. Stack
  8. ZoomIn
  9. ZoomOut
  10. RotateUp
  11. RotateDown
  12. Accordion


1.Standard

一般的なフリックでのページ切替動作になります。
普通にどのアプリでもみかける動作ですね。



2.Tablet

タブレットでみられるページ切替動作のようです。
タブレット自体あまり操作していませんが、実際はこうゆう動作をしているんでしょうね(^^;



3.CubeIn


手前側を中心にページが回転するようなページ切替動作になります。
3Dダンジョンなんかで視点が回転するようなイメージでしょうか(´・ω・`)



4.CubeOut

奥側を中心にページが回転するようなページ切替動作になります。
両方のページを見ることができるので、両方のページを確認したいときなんかに便利そうです♪




2014年11月6日木曜日

【アプリ開発】Fragmentまとめ

Fragmentについてまとめていきます(^^ゞ



注意事項

・Fragment内でActivity側のメンバ変数やメソッドを呼び出してはいけない
 → 呼び出す場合はonAttach時に行う
 → instansofで型チェックは行うべき
 → コールバック関数を使用する
・画面を回転させると引数なしのデフォルトコンストラクタで再生成される

ライフサイクル



Fragment内の変数を保存、呼出方法


    //////////////////////////////////
    @Override
    public void onSaveInstanceState(final Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putInt("KEY_FRAGMENT_ID", mListID);
        outState.putString("KEY_FRAGMENT_SITENAMES", mSiteNameS);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);

        if (savedInstanceState != null)
        {
            mListID = savedInstanceState.getInt("KEY_FRAGMENT_ID");
            mSiteNameS = savedInstanceState.getString("KEY_FRAGMENT_SITENAMES");
        }
    }
    //////////////////////////////////


Fragmentのサブクラス

・DialogFragment
・ListFragment
・PreferenceFragment
・WebViewFragment