Flex、AIR、Java、Androidなど

4月19日 2009

Androidのタスク、コンポーネント、パッケージ関連のことまとめ

Posted by: tachibana In: Android| プログラミング

ここ最近タスク関連を触ることが多かったので色々調べることができました。後々の自分用にまとめとくことにします。

1) 最近起動されたタスクリストを取得

ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> recentTaskList = am.getRecentTasks(30, ActivityManager.RECENT_WITH_EXCLUDED);

2) ComponentNameからアプリケーションを起動

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(recentTaskList.get(currentIndex).baseIntent.getComponent());

3) 文字列からアプリケーションを起動(SharedPreferenceなどに記憶させておきたい時など)

Intent app = new Intent(Intent.ACTION_MAIN);
app.addCategory(Intent.CATEGORY_LAUNCHER);
app.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
app.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);

String[] ta = taskArray[i].split("/"); // taskArray[i] == "com.hoge/com.hoge.Hoge"
app.setComponent(new ComponentName(ta[0], ta[1]));

try
    {
        context.startActivity(app);
    }
        catch(ActivityNotFoundException e)
    {
        Toast.makeText(context, "an activity not found(uninstalling app while running may cause this)", Toast.LENGTH_LONG).show();
    }

4) ComponentNameからそのアプリケーションの名前を取得

ApplicationInfo ai;
CharSequence nameStr = null;
try {
            ai = context.getPackageManager().getActivityInfo(ComponentName.unflattenFromString(compName), PackageManager.GET_ACTIVITIES).applicationInfo;
            nameStr = context.getPackageManager().getApplicationLabel(ai);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

5) ComponentNameからアプリケーションのアイコンを取得

ApplicationInfo ai;
        Drawable icon = null;
        try {
            ai = context.getPackageManager().getActivityInfo(ComponentName.unflattenFromString(compName), PackageManager.GET_ACTIVITIES).applicationInfo;
            icon = context.getPackageManager().getApplicationIcon(ai);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

尚、ActivityManager.getRecentTasks(30, ActivityManager.RECENT_WITH_EXCLUDED)で取得できる結果にはアンインストールされたアプリケーションも含まれます。何か含まないようにするいい方法がありました教えてくださいm(_ _)m

ということでパッケージの追加/削除を感知して処理を行うような必要が出てくることがあります。

そういう時はBroadcastReceiverはいつも通りに、ただ、AndroidManifest.xmlをちょっといじってやる必要があります。

AndroidManifest.xml

        <receiver android:name=".TriggerOnPackageRemoved"
             android:enabled="true"
             android:exported="false"
             android:label="TriggerOnPackageRemoved">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED"  />
                <action android:name="android.intent.action.PACKAGE_ADDED"  />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>

こんな感じで。

ここまで分かるとAndroidのホーム(デスクトップ?)がどういう仕組みなのか大分分かってきますね。

EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

2 Responses to "Androidのタスク、コンポーネント、パッケージ関連のことまとめ"

1 | Loy22

10月23日 2009 at 3:45 AM

Avatar

Effective nutrition is moderate in protein, carbohydrate, and fat. ,

2 | Emma

4月11日 2014 at 6:15 PM

Avatar

Using a motorized abrasive tool, dermabrasion exfoliates away part of
the epidermis. Although there are many methods of reducing acne scars today, but you will
not eliminate that acne scar completely unless you figure the
one that works best for you. Microdermabrasion machines are usually packaged
with micro-crystal or even diamond tip applicators that can either
be natural or synthetic.

Categories

 

2017年3月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here