2

ユーザーが通知をクリックしたときに、アプリからギャラリーを起動しようとしています。Galleryアプリのパッケージとクラス名を知っている場合にのみ可能であることがわかりました。私は4つのデバイスメーカーで同じものを見つけることができましたが、これまでのところ、このコードは機能します。MotorolaとLGのAndroidフォンのパッケージとクラス名が必要です。

誰か助けてもらえますか?開発者であり、MotorolaまたはLG Androidデバイスを所有している場合は、非常に簡単です。LogCatに接続しているときに携帯電話でギャラリーを起動するだけで、ギャラリーのパッケージとクラス名が表示されます。

コード:

Intent newIntent = new Intent();

//open Gallery in Nexus plus All Google based ROMs
if(doesPackageExist("com.google.android.gallery3d"))
    newIntent.setClassName("com.google.android.gallery3d", "com.android.gallery3d.app.Gallery");

//open Gallery in Sony Xperia android devices
if(doesPackageExist("com.android.gallery3d"))
    newIntent.setClassName("com.android.gallery3d", "com.android.gallery3d.app.Gallery");

//open gallery in HTC Sense android phones
if(doesPackageExist("com.htc.album"))                           
    newIntent.setClassName("com.htc.album", "com.htc.album.AlbumMain.ActivityMainCarousel");

//open gallery in Samsung TouchWiz based ROMs
if(doesPackageExist("com.cooliris.media"))
    newIntent.setClassName("com.cooliris.media", "com.cooliris.media.Gallery");

startActivity(newIntent);

そして、パッケージ名が存在するかどうかを確認するには:

public boolean doesPackageExist(String targetPackage) {

    PackageManager pm = getPackageManager();
    try {
        PackageInfo info = pm.getPackageInfo(targetPackage, PackageManager.GET_META_DATA);
    } catch (NameNotFoundException e) {
        return false;
    }
    return true;    
}
4

2 に答える 2

4

Intent次のような基本的な方法でギャラリー アプリを起動できるはずです。

Intent intent =  new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivity(intent);

複数のアプリで画像を表示できる場合 (Gallery や ESFileExplorer など)、アプリ ピッカーが起動することがあります。

于 2012-10-25T09:59:13.483 に答える
1

すべてのAndroidデバイスに「ギャラリー」アプリを説明するユニバーサルテーブルはありません。そのため、アクティビティリゾルバーがユーザーに表示されないようにするための最善の方法は、プログラムで可能なすべてのアクティビティハンドラーを一覧表示し、起動するものについて情報に基づいて推測することです。 。

PackageManager.queryIntentActivitiesは、開くファイルのタイプをインテントにシードする限り、インテントをそのようなパッケージのリストに変換します。

Intent newIntent = new Intent(Intent.ACTION_VIEW);
newIntent.setType("image/*");
List<ResolveInfo> allHandlers = pm.queryIntentActivities(newIntent, PackageManager.MATCH_DEFAULT_ONLY);

次に、このリストで既知のパッケージ(上記のリストから)をトロールするか、それができない場合は、リストの最初のパッケージを起動します。

ただし、画像を表示するには、独自の些細なアクティビティを作成することを検討する必要があります。それがあなたが求めるコントロールのレベルを獲得する唯一の方法です。

于 2012-11-07T18:17:20.753 に答える