如何仅从 Google Photos App 中选取图像? Android Google 照片意图
How to Pick Image From Google Photos App Only? Android Google Photos Intent
我正在尝试从 Google 照片应用程序直接 获取图像。我希望绕过通常在使用 Intent.ACTION_GET_CONTENT
时启动的应用程序选择器,而是直接转到 Google 照片(如果用户安装了它)并允许用户 select 然后返回的图像在 ActivityResult 中添加到我的应用程序。
我尝试通过以下方式进行此操作:
if (callingActivity != null && isGooglePhotosInstalled(callingActivity)) {
Intent intent = callingActivity.getPackageManager().getLaunchIntentForPackage(GOOGLE_PHOTOS_PACKAGE_NAME);
intent.setAction(Intent.ACTION_GET_CONTENT); // ALSO TRIED Intent.ACTION_PICK
intent.setType("image/*");
try {
callingActivity.startActivityForResult(intent, MediaPickerActivity.REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);
} catch (ActivityNotFoundException e) {
showErrorMsgDialog(callingActivity, "You don't have Google Photos installed! Download it from the play store today.");
e.printStackTrace();
}
}
检查是否安装了 Google Photos 我正在使用:
private static final String GOOGLE_PHOTOS_PACKAGE_NAME = "com.google.android.apps.photos";
public static boolean isGooglePhotosInstalled(Context context) {
PackageManager packageManager = context.getPackageManager();
try {
return packageManager.getPackageInfo(GOOGLE_PHOTOS_PACKAGE_NAME, PackageManager.GET_ACTIVITIES) != null;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
使用此方法,我能够在 selection 模式下成功打开 Google 照片,但是在 select 处理图像时,Google 照片应用程序崩溃。
我怎样才能做到这一点?
编辑:
如果有帮助,我已经在 Github 上创建了一个示例应用程序项目来帮助进行故障排除。来自 Google Photos 的崩溃堆栈跟踪如下:
09-01 21:30:25.081 1109-1109/? E/Binder﹕ Unbound type: dli
Searched binders:
com.google.android.apps.photos.home.HomeActivity ->
com.google.android.apps.photos.PhotosApplication ->
com.google.android.apps.photos.PhotosApplication
java.lang.IllegalStateException: Unbound type: dli
Searched binders:
com.google.android.apps.photos.home.HomeActivity ->
com.google.android.apps.photos.PhotosApplication ->
com.google.android.apps.photos.PhotosApplication
at noy.a(PG:210)
at noy.a(PG:485)
at hmm.b_(PG:1061)
at myf.a(PG:54)
at myc.a(PG:36)
at hlm.d(PG:242)
at hll.b(PG:2232)
at fns.onClick(PG:1375)
at fnr.onClick(PG:1408)
at android.view.View.performClick(View.java:4761)
at android.view.View$PerformClick.run(View.java:19767)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
在此处找到示例项目:
https://github.com/michaelgarnerdev/GooglePhotosIntent
试试下面的代码:
public void launchGooglePhotosPicker(Activity callingActivity) {
if (callingActivity != null && isGooglePhotosInstalled()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
List<ResolveInfo> resolveInfoList = callingActivity.getPackageManager().queryIntentActivities(intent, 0);
for (int i = 0; i < resolveInfoList.size(); i++) {
if (resolveInfoList.get(i) != null) {
String packageName = resolveInfoList.get(i).activityInfo.packageName;
if (GOOGLE_PHOTOS_PACKAGE_NAME.equals(packageName)) {
intent.setComponent(new ComponentName(packageName, resolveInfoList.get(i).activityInfo.name));
callingActivity.startActivityForResult(intent, REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);
return;
}
}
}
}
}
你可以只使用 intent.setPackage():
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setPackage(GOOGLE_PHOTOS_PACKAGE_NAME);
callingActivity.startActivityForResult(intent, REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);
我正在尝试从 Google 照片应用程序直接 获取图像。我希望绕过通常在使用 Intent.ACTION_GET_CONTENT
时启动的应用程序选择器,而是直接转到 Google 照片(如果用户安装了它)并允许用户 select 然后返回的图像在 ActivityResult 中添加到我的应用程序。
我尝试通过以下方式进行此操作:
if (callingActivity != null && isGooglePhotosInstalled(callingActivity)) {
Intent intent = callingActivity.getPackageManager().getLaunchIntentForPackage(GOOGLE_PHOTOS_PACKAGE_NAME);
intent.setAction(Intent.ACTION_GET_CONTENT); // ALSO TRIED Intent.ACTION_PICK
intent.setType("image/*");
try {
callingActivity.startActivityForResult(intent, MediaPickerActivity.REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);
} catch (ActivityNotFoundException e) {
showErrorMsgDialog(callingActivity, "You don't have Google Photos installed! Download it from the play store today.");
e.printStackTrace();
}
}
检查是否安装了 Google Photos 我正在使用:
private static final String GOOGLE_PHOTOS_PACKAGE_NAME = "com.google.android.apps.photos";
public static boolean isGooglePhotosInstalled(Context context) {
PackageManager packageManager = context.getPackageManager();
try {
return packageManager.getPackageInfo(GOOGLE_PHOTOS_PACKAGE_NAME, PackageManager.GET_ACTIVITIES) != null;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
使用此方法,我能够在 selection 模式下成功打开 Google 照片,但是在 select 处理图像时,Google 照片应用程序崩溃。
我怎样才能做到这一点?
编辑: 如果有帮助,我已经在 Github 上创建了一个示例应用程序项目来帮助进行故障排除。来自 Google Photos 的崩溃堆栈跟踪如下:
09-01 21:30:25.081 1109-1109/? E/Binder﹕ Unbound type: dli
Searched binders:
com.google.android.apps.photos.home.HomeActivity ->
com.google.android.apps.photos.PhotosApplication ->
com.google.android.apps.photos.PhotosApplication
java.lang.IllegalStateException: Unbound type: dli
Searched binders:
com.google.android.apps.photos.home.HomeActivity ->
com.google.android.apps.photos.PhotosApplication ->
com.google.android.apps.photos.PhotosApplication
at noy.a(PG:210)
at noy.a(PG:485)
at hmm.b_(PG:1061)
at myf.a(PG:54)
at myc.a(PG:36)
at hlm.d(PG:242)
at hll.b(PG:2232)
at fns.onClick(PG:1375)
at fnr.onClick(PG:1408)
at android.view.View.performClick(View.java:4761)
at android.view.View$PerformClick.run(View.java:19767)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
在此处找到示例项目: https://github.com/michaelgarnerdev/GooglePhotosIntent
试试下面的代码:
public void launchGooglePhotosPicker(Activity callingActivity) {
if (callingActivity != null && isGooglePhotosInstalled()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
List<ResolveInfo> resolveInfoList = callingActivity.getPackageManager().queryIntentActivities(intent, 0);
for (int i = 0; i < resolveInfoList.size(); i++) {
if (resolveInfoList.get(i) != null) {
String packageName = resolveInfoList.get(i).activityInfo.packageName;
if (GOOGLE_PHOTOS_PACKAGE_NAME.equals(packageName)) {
intent.setComponent(new ComponentName(packageName, resolveInfoList.get(i).activityInfo.name));
callingActivity.startActivityForResult(intent, REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);
return;
}
}
}
}
}
你可以只使用 intent.setPackage():
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setPackage(GOOGLE_PHOTOS_PACKAGE_NAME);
callingActivity.startActivityForResult(intent, REQUEST_PHOTO_FROM_GOOGLE_PHOTOS);