emmmmm 开头说两句吧 因为这是我第一次写博客 相当于自己记录下自己解决的问题吧而且刚入社会去开阔自己的视野
正文!!!!
先上效果图
一:准备工作
二:接入广告的SDK
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4.在
<service android:name="com.qq.e.comm.DownloadService" android:exported="false" > service> <activity android:name="com.qq.e.ads.ADActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" > activity>
这样配置工作就算完成了
三:功能的实现
然后我们还需要创建一个展示用户开屏 广告的活动,New一个Activity名字叫做SplashActivity,
activity包里面和layout包里面如图所示
并且指定布局文件名为 activity_splash.xml 然后修改activity_splash.xml里面的代码,如下所示
xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> RelativeLayout>
其实就是在将这个页面变成一个盛放腾讯广告的容器 这个页面的id为container 后面在Activity里面找到这个页面id就可以
下面为SplashActivity的代码,如下所示
ublic class SplashActivity extends AppCompatActivity { private RelativeLayout container; private boolean canJump; @SuppressLint("WrongViewCast") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash1); container = (RelativeLayout) findViewById(R.id.container); //运行时权限处理 List<String> permissionList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION); } if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissionList.isEmpty()){ String [] permissions = permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(this,permissions,1); }else{ requestAds(); } //全屏代码 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } /** * 初始化控件 */ /* * * 请求开屏广告 * */ private void requestAds() { String appId="1106336831";//这个地方放你自己的appID String adId = "5020929588094641";//这个地方放自己的adID new SplashAD(this, container, appId, adId, new SplashADListener() { @Override public void onADDismissed() { //广告显示完毕 forward(); } @Override public void onNoAD(AdError adError) { //广告加载失败 forward(); } @Override public void onADPresent() { //广告加载成功 } @Override public void onADClicked() { //广告被点击 } @Override public void onADTick(long l) { } }); } @Override protected void onPause() { super.onPause(); canJump = false; } @Override protected void onResume() { super.onResume(); if(canJump) { forward(); } canJump = true; } private void forward() { if (canJump){ //跳转到MainActivity Intent intent = new Intent(this,MainActivity.class); startActivity(intent); finish(); }else { canJump = true; } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults.length>0){ for(int result:grantResults){ if (result != PackageManager.PERMISSION_GRANTED){ Toast.makeText(this,"必须同意所有权限才能使用本程序", Toast.LENGTH_SHORT).show(); finish(); return; } } requestAds(); }else { Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show(); finish(); } break; default: } } }
注意上方代码中的appId和adId 要替换成自己的!
可以看到,在onCreate()方法中,我们现实收到了RelativeLayout的实列,然后就开始进行权限的处理。这里需要运行时一次性申请多个权限。
(PS:我觉得有些权限可以取消,自己测试过几次取消了一个权限也可以运行,但是不确定 ,可以自己试验下)
当用户同意了所有的权限申请之后就会调用requestAds()的方法来请求广告数据。在这个方法里面我们现实定义了appId和adId这两个变量,这个是在腾讯广告联盟后台生成的ID,然后创建SplashAD的实列来获取广告的数据。SplashAD的构造函数 接收5个参数,第一个参数是当前活动的实列,第二个参数是RealativeLayout的实列,第二第三个是应用ID和广告位ID,最后一个是SplashADlistener的实列,用来监听广告的回调。
后面还使用了canjump变量用于对活动的跳转控制。整体流程差不多就这个样子了。
最后要记得将主活动设置成SplashActivity而不是MainActivity,否者不会显示广告页面。在AndroidManifest.xml里面修改代码 在截图加粗的地方添加如下代码
现在广告的SDK全部对接完成了
效果图在顶部可以去看下
5s跳过是腾讯广告自带的可以不用去管
最后我是刚学Android 希望大佬们能够多给我点意见和建议
以上代码是我自己在项目中扒出来的 这些东西不涉及隐私
预告:下篇写腾讯的Banner广告
腾讯banner广告