在Android手机中启动图库

时间:2012-10-25 09:54:41

标签: android android-intent gallery

我正在尝试在用户点击通知时从我的应用启动图库。我发现只有你知道Gallery应用程序的包和类名才有可能。我已经设法为四个设备制造商找到相同的,到目前为止这个代码工作。 我只需要摩托罗拉和LG Android手机的套餐和类名。

有人可以帮忙吗?如果您是开发人员并拥有摩托罗拉或LG Android设备,这对您来说非常容易。您只需在连接到LogCat时在手机中启动图库,它将显示图库的包和类名。

CODE:

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;    
}

2 个答案:

答案 0 :(得分:3)

您应该能够通过基本的Intent启动图库应用:

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

如果多个应用程序能够显示图像(例如Gallery和ESFileExplorer),它可能会触发应用程序选择器。

答案 1 :(得分: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);

然后,您可以搜索此列表中的已知包(来自上面的列表),或者,如果没有,则启动列表中的第一个。

但是,你应该考虑自己制作一个简单的活动来显示图像。这是获得你所寻求的控制水平的唯一途径。