アプリ詳細画面を直接開く方法がAPIによって違ったのでメモ。

というかめんどすぎる。。


アプリ詳細画面ってなんぞやって方は下記の画面。

いわゆる設定画面>アプリ一覧>アプリで見える画面です。

※お使いの端末によって見た目は違うと思います。これはLG optimus Gです。


うつ病miwawaの日記帳

ということでアプリ側からこの画面に直接いくようにするには下記の3パターンあり。


API7以下 *****************************************


Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");

intent.putExtra("com.android.settings.ApplicationPkgName", pk);


API8 *****************************************

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");

intent.putExtra("pkg", pk);


API9以上 *****************************************

Intent intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS",Uri.parse("package:" + pk ));


//pkは任意のパッケージ名です。


API9からやっと簡単になりました。

API7以下とAPI8はputExtraの部分が違うだけです。

何かためしたのでしょうか?おかげで面倒な感じになってます。。


なので実装するとしたらこんな感じでしょうか。


//////////////////////////////////////////////////////////////////////////////////


String pk = "任意のパッケージ名"


//APIを確認して振り分け
//Build.VERSION_CODES.GINGERBREAD = API9
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD){


intent = new Intent("android.settings.APPLICATION_DETAILS_SETTINGS",
Uri.parse("package:" + pk ));


}else{


intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");

//Build.VERSION_CODES.FROYO = API8
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.FROYO) {


intent.putExtra("pkg", pk);


} else {


intent.putExtra("com.android.settings.ApplicationPkgName", pk);


}

}


//一応動くか確認してから起動
List<ResolveInfo> list=pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if( list.size() > 0){


startActivity(intent);

}