项目笔记3

项目笔记:
1、设置沉浸式状态栏
   方法一:设置主题样式
   values文件夹的styles文件:
   <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <!--<item name="colorPrimary">@color/colorPrimary</item>-->
        //colorPrimaryDark属性控制状态栏的背景色
        <!--<item name="colorPrimaryDark">@color/colorPrimaryDark</item>-->
        <!--<item name="colorAccent">@color/colorAccent</item>-->
    </style>
values-v19文件夹的styles文件:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!--<item name="android:windowTranslucentNavigation">true</item>-->
        <item name="android:windowTranslucentStatus">true</item>
    </style>
values-v21文件夹的styles文件:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
方法二:代码动态设置
//        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            //顶部状态栏还在,只是背景色变了
    //        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //全屏,状态栏隐藏了,底部导航栏还在
    //        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            //底部导航栏还在,只是背景色变了
    //        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    //        }

2、哈哈哈,好忧桑,得结论之前没有深思熟虑,先把结果跟别人说了,后面再回头看的时候发现有些出入,哎,还是不够沉稳,废话不多说,上正题
   个推SDK接入:
   1、在libs文件夹添加jar包,Android Studio的在src/main/jniLibs添加so文件(so文件一定要在这个目录,不然个推获取不到clientid,也就推送不成功了)
   2、添加权限,和一些文件,自定义GTIntentService和Service,直接把demo里的两个文件拷贝过来
   3、启动APP的时候有打印onReceiveClientId,表明可以接受消息推送了
   4、推送通知时,是服务端定义通知的图标,标题,内容,以及点击通知后的跳转,如果在通知里面加了透传内容,则会触发透传的相关内容,通知和透传混用时,只有点了通知后才会触发透传
   5、只透传的时候,客户端定义通知的图标,接受服务端透传过来的内容,点击通知的时候,客户端根据服务端传送过来的内容决定跳转到哪个页面
   6、有透传内容的时候才会触发广播,才会接收到服务器端透传过来的内容
   
3、通知栏通知
   Notification myNotify = new Notification();  
myNotify.icon = R.drawable.logo;  //通知的logo
myNotify.tickerText = content;  
myNotify.when = System.currentTimeMillis();  
myNotify.flags = Notification.FLAG_AUTO_CANCEL;// 不能够自动清除
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); //设置来通知的时候响一下
myNotify.sound = uri;
RemoteViews rv = new RemoteViews(context.getPackageName(),R.layout.my_notification); //自定义通知列表的显示布局
rv.setTextViewText(R.id.text_content,content);  //通知内容
rv.setTextViewText(R.id.text_title,title);   //通知标题
rv.setTextViewText(R.id.text_time,FormatUtils.getNowTime());  //通知接受的时间
myNotify.contentView = rv;   //设置通知布局
Intent intentTo = new Intent(context,NotificationHelperActivity.class);  //设置点击通知后的响应事件
intentTo.putExtra("payloadJson",data);
PendingIntent contentIntent = PendingIntent.getActivity(context,1,intentTo,PendingIntent.FLAG_UPDATE_CURRENT);
myNotify.contentIntent = contentIntent;
manager.notify(NOTIFICATION_FLAG, myNotify);

//获取当前时间的小时和分钟
public static String getNowTime(){
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date date = new Date(System.currentTimeMillis());
String format = sdf.format(date);
return format;
}

//不同的机型通知栏列表的背景色不同,为了兼容所有机型和系统版本,需对自定义的通知栏列表布局做以下适配
android5.0以下:(layout文件夹)
通知栏列表布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="10dp">
    <ImageView
        android:layout_height="match_parent"
        android:layout_width="44dp"
        android:background="@drawable/ic_launcher"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginLeft="5dp"
        android:gravity="center_vertical">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/text_title"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="你有一条新信息"
                android:textSize="17sp"
                android:maxLines="1"
                android:ellipsize="end"
                android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/text_time"
                android:layout_alignParentEnd="true"
                android:layout_marginEnd="10dp"
                android:textSize="14sp"
                android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent"/>
        </RelativeLayout>
        <TextView
            android:id="@+id/text_content"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="你有一条新信息"
            android:textSize="14sp"
            android:maxLines="1"
            android:ellipsize="end"
            android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent"/>
    </LinearLayout>


</LinearLayout>


android5.0及以上通知栏列表布局:
新建layout-v21文件夹:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="horizontal"
    android:padding="10dp">
    <ImageView
        android:layout_height="match_parent"
        android:layout_width="44dp"
        android:background="@drawable/ic_launcher"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginLeft="5dp"
        android:gravity="center_vertical">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/text_title"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="你有一条新信息"
                android:textSize="17sp"
                android:maxLines="1"
                android:ellipsize="end"
                android:textAppearance="@android:style/TextAppearance.Material.Notification.Title"/>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/text_time"
                android:layout_alignParentEnd="true"
                android:layout_marginEnd="10dp"
                android:textSize="14sp"
                android:textAppearance="@android:style/TextAppearance.Material.Notification.Time"/>
        </RelativeLayout>
        <TextView
            android:id="@+id/text_content"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="你有一条新信息"
            android:textSize="14sp"
            android:maxLines="1"
            android:ellipsize="end"
            android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2"/>
    </LinearLayout>


</LinearLayout>
 android5.0以下:android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent.Title"
                  android:textAppearance="@android:style/TextAppearance.StatusBar.EventContent"
android5.0及以上:android:textAppearance="@android:style/TextAppearance.Material.Notification.Title"
                 android:textAppearance="@android:style/TextAppearance.Material.Notification.Time"
android:textAppearance="@android:style/TextAppearance.Material.Notification.Line2"

4、Error:Unable to resolve dependency for ':app@yingyongbaoLintOptionsUnitTest/compileClasspath': Could not resolve project :BankCardLib.
   解决办法:把所有module的build.gradle文件里面的buildTypes里包含的内容都统一,比如你的app的build.gradle文件有release,debug,lintOptions,compileOptions几个属性,
             则其他的module里的build.gradle文件也要包含这几个属性。
    buildTypes {
        release {
            minifyEnabled false
//            zipAlignEnabled true
            // 移除无用的resource文件
//            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            signingConfig signingConfigs.release
        }
        debug {
//            signingConfig signingConfigs.release
        }
        lintOptions {
//            disable 'MissingTranslation'
        }
        compileOptions {
//            targetCompatibility JavaVersion.VERSION_1_8
//            sourceCompatibility JavaVersion.VERSION_1_8
        }
    }

5、使用系统通知样式
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setContentTitle(title);
builder.setContentText(content);
builder.setDefaults(NotificationCompat.DEFAULT_ALL);
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.drawable.logo));
builder.setSmallIcon(R.drawable.logo); //切记一定要设置这个SmallIcon,不然死活不弹通知


                Intent intentTo = new Intent(context,NotificationHelperActivity.class);
                intentTo.putExtra("payloadJson",data);
                PendingIntent contentIntent = PendingIntent.getActivity(context,0,intentTo,PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
// builder.setFullScreenIntent(contentIntent,true); //设置了这个之后当有通知过来的时候会自动跳转到点击通知跳到的页面
builder.setAutoCancel(true); //设置通知可以自动清除
Notification notification = builder.build();
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notification.sound = uri;  //设置通知铃声
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_FLAG,notification);
 
6、Android Studio运行报错:the apk for your currently selected variant(app-release-unsigned.apk)is not signed.Please specity a signing configuration for this variant(release)
   解决办法:点击Android Studio左下角的Build Variants,修改Build Variants的值为debug或者比如huaweiDebug
   
7、Android Studio报错:Error:Cannot choose between the following configurations of project :ocr_ui:
  - debugApiElements
  - debugRuntimeElements
  - releaseApiElements
  - releaseRuntimeElements
  解决办法:删除project的build.gradle文件里面的classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
            删除module的build.gradle文件里面的apply plugin: 'com.neenbedankt.android-apt'
修改module的build.gradle文件里面dependencies里的apt为annotationProcessor,比如annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

8、Error:(25, 33) 错误: 程序包org.apache.http.conn.util不存在
   解决办法: 
   android{
    buildToolsVersion '26.0.2'
    useLibrary 'org.apache.http.legacy' //加这句
    defaultConfig {
}
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值