Android学习笔记之——下载function的debug

之前博文《 Android 学习笔记之——服务中的下载功能》中最后的demo并没有成功,本博文对其进行debug

 

目录

NotificationCompat.Builder()过时,失效

Android9.0开始前台服务需要申请权限

依赖包的问题

Notification都要指定Channel(通道)

参考资料


 

NotificationCompat.Builder()过时,失效

参考资料https://blog.csdn.net/zwk_sys/article/details/79661045

在前台服务的时候,显示NotificationCompat.Builder不支持

原因是升级到Android O 版本后,该方法被以下方法取代:

NotificationCompat.Builder(Context context, String channelId)

因此代码修改如下

 

Android9.0开始前台服务需要申请权限

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

 

依赖包的问题

在app/build.gradle的android闭包中添加如下:

compileOptions{
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8

        }

  这段代码是为了开启Java1.8,能够使用Lambda,因为 stream API 和接口默认实现等特性都只支持Android 7.0及以上的系统,而Lambda表达式能最低兼容到Android 2.3系统,基本上覆盖了所有的Android手机了

但是好像没有用。

这里要注意compile已经全部被implementation替代了,由于之前的项目统一用compile依赖,导致的情况就是模块耦合性太高,不利于项目拆解,使用implementation之后虽然使用起来复杂了但是做到降低偶合兴提高安全性不失为一个好办法。

改为

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
    implementation 'com.squareup.okhttp3:okhttp:3.14.2'
}

好像也是没有用。。。。

 

Notification都要指定Channel(通道)

主要就是下面这个函数的修改(DownloadService.java)

和书上的代码有区别主要原因是在Android 8(API 26)之后引入了Channel,所有的Notification都要指定Channel(通道),对于每一个Channel你都可以单独去设置它;比如通知开关、提示音、是否震动或者是重要程度等;这样每个应用程序的通知在用户面前都是透明的。

private Notification getNotification(String title,int progress){
        Intent intent=new Intent(this,MainActivity.class);
        PendingIntent pi=PendingIntent.getActivity(this,0,intent,0);

        NotificationManager manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel channel=null;
        Uri uri= Settings.System.DEFAULT_NOTIFICATION_URI;

        //Android8.0之后的版本要求设置通知渠道
        if(android.os.Build.VERSION.SDK_INT>= Build.VERSION_CODES.O){
            channel=new NotificationChannel("Notification","This is 2",NotificationManager.IMPORTANCE_HIGH);
            channel.setDescription("This is 1");
            channel.setSound(uri,Notification.AUDIO_ATTRIBUTES_DEFAULT);
            manager.createNotificationChannel(channel);

        }


        NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),
                R.mipmap.ic_launcher));
        builder.setWhen(System.currentTimeMillis());
        builder.setContentIntent(pi);
        builder.setContentTitle(title);
        builder.setChannelId("Notification");
        builder.setAutoCancel(true);
        if(progress>=0){
            //当progress大于或等于0时才显示下载进度
            builder.setContentText(progress+"%");
            builder.setProgress(100,progress,false);
        }
        return builder.build();
    }

但是仍然显示下载失败???

而这里的下载失败则是由于没有在app/build.gradle的android闭包中添加如下:

compileOptions{
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8

        }

但是报错

改为更改下载链接试试

http://39.134.182.103:6510/shouji.360tpcdn.com/190531/c63afe5408b3e7418b411b091374a905/com.tencent.mobileqq_90026.apk

还是不行

首先对于Android闭包应该是这样放置

但是仍然不行。。。。。

 

 

 

 

 

参考资料

https://www.cnblogs.com/hzauxx/p/11001285.html(写得非常好)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值