2

当用户单击通知时,我正在尝试从我的应用程序启动图库。我发现只有知道 Gallery 应用程序的包和类名才有可能。我已经设法为四家设备制造商找到了相同的代码,到目前为止,这段代码有效。我只需要 Motorola 和 LG Android 手机的包和类名。

任何人都可以帮忙吗?如果您是开发人员并拥有摩托罗拉或 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

您应该可以通过以下基本方式启动 Gallery 应用程序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 转换为这样的包列表,只要您使用要打开的文件类型为 Intent 播种:

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

然后,您可以在此列表中搜索已知软件包(从上面的列表中),或者如果失败,则启动列表中的第一个。

但是,您应该考虑自己制作一个简单的 Activity 来显示图像。这是获得您所寻求的控制水平的唯一方法。

于 2012-11-07T18:17:20.753 回答