1.图标
必选按照图标模版制作,模版的链接如下http://goo.gl/14DrRi,把一张大图标放上去,对好位置可以自动生成对应尺寸的所有图标
2.返回按钮
游戏中必须按google要求添加一些和返回按钮相关的逻辑
3.权限
google对权限处理的要求比较严格,尽量少用权限,尽量不要在APP启动时申请权限,由于Android6.0之后启用了动态权限,权限的尽量在用的时候再申请,如果用户拒绝了正在申请的权限,还要弹出提示框来告诉用户为什么要申请这个权限,而且不能直接跳转到设置界面,直到用户点了不再显示之后才能跳转到设置界面要求用户开启权限,具体逻辑还是直接上代码:
public voidRequest(){
booleansuccess =true;
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {
// Here, thisActivity is the current activity
if(ContextCompat.checkSelfPermission(this,permissions[0]) != PackageManager.PERMISSION_GRANTED) {
success =false;
// Should we show an explanation?
if(ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[0])) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
showDialogTipUserRequestPermission();
}else{
// No explanation needed, we can request the permission.
startRequestPermission();
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
}
}
}
if(success){
RequestSuccess();
}
}
// 开始提交请求权限
private voidstartRequestPermission() {
ActivityCompat.requestPermissions(this,permissions,PERMISSIONS_WRITE_EXTERNAL_STORAGE_CODE);
}
// 重新请求
public voidReRequest()
{
if(ActivityCompat.shouldShowRequestPermissionRationale(this,permissions[0])) {
showDialogTipUserRequestPermission();
}
else{
// 提示用户去应用设置界面手动开启权限
showDialogTipUserGoToAppSettting();
}
}
// 提示用户该请求权限的弹出框
private voidshowDialogTipUserRequestPermission() {
newAlertDialog.Builder(this)
.setTitle(permission_title)
.setMessage(permission_explain)
.setPositiveButton(permission_open, newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, intwhich) {
startRequestPermission();
}
}).show();
// .setNegativeButton(permission_cancel, new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// showDialogTipUserGoToAppSettting();
// }
// }).setCancelable(false).show();
}
// 用户权限 申请 的回调方法
@Override
public voidonRequestPermissionsResult(intrequestCode,@NonNullString[] permissions,@NonNullint[] grantResults) {
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
if(requestCode ==PERMISSIONS_WRITE_EXTERNAL_STORAGE_CODE) {
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {
if(grantResults[0] != PackageManager.PERMISSION_GRANTED) {
ReRequest();
}else{
RequestSuccess();
}
}
}
}
// 提示用户去应用设置界面手动开启权限
private voidshowDialogTipUserGoToAppSettting() {
dialog=newAlertDialog.Builder(this)
.setTitle(permission_title)
.setMessage(permission_explain)
.setPositiveButton(permission_open, newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, intwhich) {
// 跳转到应用设置界面
goToAppSetting();
}
})
.setNegativeButton(permission_cancel, newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, intwhich) {
finish();
}
}).setCancelable(false).show();
}
// 跳转到当前应用的设置界面
private voidgoToAppSetting() {
Intent intent =newIntent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package",getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent,PERMISSIONS_WRITE_EXTERNAL_STORAGE_ACTIVITY_CODE);
}
@Override
protected voidonActivityResult(intrequestCode, intresultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(requestCode ==PERMISSIONS_WRITE_EXTERNAL_STORAGE_ACTIVITY_CODE) {
if(android.os.Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
inti = ContextCompat.checkSelfPermission(this,permissions[0]);
// 权限是否已经 授权 GRANTED---授权 DINIED---拒绝
if(i != PackageManager.PERMISSION_GRANTED) {
ReRequest();
}else{
if(dialog!=null&&dialog.isShowing()) {
dialog.dismiss();
}
RequestSuccess();
}
}
}
}
// 获取权限成功
protected voidRequestSuccess(){
//Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();
}
4.其他需求
根据google邮件要求修改即可
网友评论