Android高仿网易云音乐-启动界面实现和动态权限处理 - 爱学啊
source link: https://www.cnblogs.com/woblog/p/16440026.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Android高仿网易云音乐-启动界面实现和动态权限处理
基本上没有什么难点,就是布局,然后显示用户协议对话框,动态处理权限,判断是否显示引导界面,是否显示广告界面等。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".component.splash.activity.SplashActivity">
<!--banner-->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="120dp"
android:src="@drawable/splash_banner" />
<!--logo-->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/copyright"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:src="@drawable/splash_logo" />
<!--版权-->
<TextView
android:id="@+id/copyright"
android:textColor="@color/black80"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:text="@string/copyright" />
</RelativeLayout>
是否显示用户协议对话框
if (DefaultPreferenceUtil.getInstance(getHostActivity()).isAcceptTermsServiceAgreement()) {
//已经同意了用户协议
checkPermission();
} else {
showTermsServiceAgreementDialog();
}
动态处理权限
现在做Android必须要动态处理权限,这里使用第三方框架,推荐再用到的时候才动态请求权限,写法和现在一样。
private void checkPermission() {
//让动态框架检查是否授权了
//如果不使用框架就使用系统提供的API检查
//它内部也是使用系统API检查
//只是使用框架就更简单了
SplashActivityPermissionsDispatcher.onPermissionGrantedWithPermissionCheck(this);
}
/**
* 权限授权了就会调用该方法
* 请求相机权限目的是扫描二维码,拍照
*/
@NeedsPermission({
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
})
void onPermissionGranted() {
//如果有权限就进入下一步
prepareNext();
}
/**
* 显示权限授权对话框
* 目的是提示用户
*/
@OnShowRationale({
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
})
void showRequestPermission(PermissionRequest request) {
new AlertDialog.Builder(getHostActivity())
.setMessage(R.string.permission_hint)
.setPositiveButton(R.string.allow, (dialog, which) -> request.proceed())
.setNegativeButton(R.string.deny, (dialog, which) -> request.cancel()).show();
}
/**
* 拒绝了权限调用
*/
@OnPermissionDenied({
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
})
void showDenied() {
//退出应用
finish();
}
/**
* 再次获取权限的提示
*/
@OnNeverAskAgain({
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
})
void showNeverAsk() {
//继续请求权限
checkPermission();
}
/**
* 授权后回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//将授权结果传递到框架
SplashActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
}
private void postNext() {
binding.copyright.postDelayed(new Runnable() {
@Override
public void run() {
next();
}
}, Config.SPLASH_DEFAULT_DELAY_TIME);
}
private void next() {
//获取意图的目的是,因为启动该界面的时候,可能携带一些数据
//需要在主界面处理
Intent intent = new Intent();
Intent oldIntent = getIntent();
IntentUtil.cloneIntent(oldIntent, intent);
// if (sp.isLogin()) {
// intent.setClass(getHostActivity(), AdActivity.class);
// } else {
intent.setClass(getHostActivity(), MainActivity.class);
// }
startActivity(intent);
//关闭当前界面
finish();
//禁用启动动画
overridePendingTransition(0, 0);
}
Recommend
-
42
技术栈 Vue + Vue-Router + Vuex + Webpack + Axios 现在就克隆下来看看吧! Github地址: github.com/cat-walk/mu… 项目部署地址: meiyun.info 如果你发现该项目有问题,建议先看看本
-
46
程序员 - @sl1673495 - [mv 功能预览地址]( http://www.shanshihao.cn/mvs)[搜索想看的 mv]( http://www.shanshihao.cn/search/iu/mvs)
-
5
Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI 转...
-
5
Android高仿qq列表分组 ...
-
5
Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单_Hongyang-CSDN博客_android 圆形菜单转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43131133,本文出自...
-
12
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/41531475,本文出自: 【张鸿洋的博客】 之前写...
-
2
这是一个使用Java(以后还会推出Kotlin版本)语言,从0开发一个Android平台,接...
-
6
0.效果图 效果图依次为发现界面顶部,包含首页轮播图,水平滚动的按钮,推荐...
-
7
列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到...
-
5
因为OC版本大部分截图和Swift版本一样,所以就不再另...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK