小编Jas*_*son的帖子

从新的Google+(加)照片应用程序下载图像

最近,Google为Google+(加号)添加了照片应用,当您启动Intent选择图片时,它会显示出来.但是,如果我从Google+照片中选择图片并尝试在我的应用程序中使用它,我当前的逻辑都无法返回可用的URI或URL来实际获取我可以下载和操作的图像.我目前正在使用"常用"方法来尝试操作可在Stack Overflow和其他地方找到的URI.如果需要,我可以提供代码,但此时我觉得它有点无关紧要,因为除了这个新的应用程序之外,它适用于其他所有内容.关于如何获得可用图像的任何想法?

URI看起来如下所示:

content://com.google.android.apps.photos.content/0/https%3A%2F%2Flh5.googleusercontent.com%<a bunch of letters and numbers here>
Run Code Online (Sandbox Code Playgroud)

无论我从Google照片应用中选择什么,MediaColumns.DATA信息始终返回null并MediaColumns.DISPLAY_NAME始终返回image.jpg.如果我尝试将所有内容从https粘贴到浏览器的末尾,则不会出现任何问题.不知道如何从中获取有用的信息.

android android-contentprovider google-plus google-photos

32
推荐指数
1
解决办法
1万
查看次数

如何正确处理startForegrounds两个通知

我有一个上传文件的IntentService.一切正常,但我对如何处理通知有点困惑.当我开始使用通知时,startForeground()因为文件可能相当大,除非绝对必要,否则我不希望上传被杀死.当我使用startForeground()它时,在通知区域中显示两个通知(一个在正在进行,一个在通知下):

例:

我已经阅读了许多不同的Stack Overflow帖子和网络文章,但他们都没有回答我的问题...希望我没有错过一个谈论这个问题.

我的理解是,上图中的持续通知(没有进度条的通知)放在那里,因为它在前台运行(服务文档).如果你问我,这一切都很好,我理解为什么.但是,我不需要显示两个通知,我很确定大多数人不希望两个通知混乱通知区域.我想知道如何正确处理通知,以便只有一个显示并且不会使通知区域混乱.

我能够解决这个问题的唯一方法是,如果我将startForeground (int id, Notification notification)(ONGOING_NOTIFICATION_ID在下面的代码中)的整数ID设置为零.但是,我上面引用的文档说:

Caution: The integer ID you give to startForeground() must not be 0

将其设置为0将禁用正在进行的通知,然后只显示带有进度条的常规通知.我想我可以通过设置来"修复"这个, .setOngoing(true)直到它完成上传文件然后设置.setOngoing(false)一旦完成,所以它可以被解雇.我不确定将整数ID设置为0对于"谨慎"是多么重要.对我来说,这似乎是一种懒惰的方式来解决我遇到的问题,但我不知道知道是否有其他后果将其设置为0.此外,这只有在我只有一个我正在处理的通知时才有效.如果我有多个不同的通知,那么每个我都需要不同的ID,这不起作用.更新:看起来将ID设置为0将无法在Android 4.3中运行,所以现在我回到原点.

什么是绕过显示两个通知的有效方法?

更新/解决方案: Duh,休息一段时间然后再回到这里并根据@dsandler的建议仔细检查我所做的事情帮助我弄清楚我做错了什么.我在进行进度更新时没有设置正确的ID,所以这就是为什么它创建两个通知而一个没有得到更新.对所有通知使用相同的ID(ONGOING_NOTIFICATION_ID)解决了我的问题.请参阅下面的代码,了解我之前没有包含的其他部分以及我犯错的地方.

UploadFile.java的相关代码:

public class UploadFile extends IntentService {

    private static final int ONGOING_NOTIFICATION_ID = 1;

    @Override
    protected void onHandleIntent(Intent intent) {
        mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setContentTitle(getText(R.string.upload))
            .setContentText("0% " + getText(R.string.upload_in_progress))
            .setSmallIcon(android.R.drawable.stat_sys_upload);

        startForeground(ONGOING_NOTIFICATION_ID, mBuilder.build()); …
Run Code Online (Sandbox Code Playgroud)

android android-service android-notifications intentservice

8
推荐指数
1
解决办法
4922
查看次数

Android Google+无法获取授权码

我正在尝试根据这篇文章获取Google+身份验证代码:您的应用的服务器端访问权限.但是,每当我运行我的应用程序并尝试获取代码时,我在LogCat中获得以下内容:

07-23 23:42:31.760: E/getAccessToken()(11114): [ERROR] GoogleAuthException: com.google.android.gms.auth.GoogleAuthException: Unknown
Run Code Online (Sandbox Code Playgroud)

我浏览了很多东西,据我所知,我已经在下面的代码中正确设置了所有内容.任何想法为什么它没有获得身份验证令牌?

仅供参考,我有在既有的应用程序和Web应用程序配置的OAuth和我使用的服务器(而不是应用程序)的ID为范围字符串API控制台一个项目设置.我也跟着上面的链接中的示例,应用程序工作正常,允许您登录/退出,但我无法获得身份验证代码.

private String getAccessToken() {
    String scopesString = Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE;
    String scope = "oauth2:server:client_id:" + SERVER_CLIENT_ID + ":api_scope:" + scopesString;
    Bundle appActivities = new Bundle();
    appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
            "http://schemas.google.com/AddActivity");
    String code = null;
    try {
         code = GoogleAuthUtil.getToken(
                    this,                             // Context context
                    mPlusClient.getAccountName(),     // String accountName
                    scopes,                           // String scope
                    appActivities                     // Bundle bundle
                );
    } catch (IOException transientEx) {
      // network or server error, the call …
Run Code Online (Sandbox Code Playgroud)

android oauth-2.0 google-plus

7
推荐指数
1
解决办法
3485
查看次数