Commit 6105b329 authored by feihuaduo's avatar feihuaduo

新增悬浮窗权限和通知权限判断

parent b95032b4
package cn.garymb.ygomobile.ui.cards; package cn.garymb.ygomobile.ui.cards;
import android.content.Intent; import android.content.Intent;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.ActionBarDrawerToggle;
...@@ -112,7 +114,6 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack ...@@ -112,7 +114,6 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
} }
} }
private void intentSearch(){ private void intentSearch(){
// intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE); // intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE);
mCardSelector.search(ServiceDuelAssistant.cardSearchMessage); mCardSelector.search(ServiceDuelAssistant.cardSearchMessage);
......
package cn.garymb.ygomobile.ui.home; package cn.garymb.ygomobile.ui.home;
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
...@@ -7,12 +9,15 @@ import android.graphics.Color; ...@@ -7,12 +9,15 @@ import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.Gravity; import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
...@@ -44,6 +49,7 @@ import org.greenrobot.eventbus.ThreadMode; ...@@ -44,6 +49,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.List; import java.util.List;
import cn.garymb.ygodata.YGOGameOptions; import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.YGOStarter; import cn.garymb.ygomobile.YGOStarter;
...@@ -119,6 +125,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -119,6 +125,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
} else { } else {
startService(new Intent(this, ServiceDuelAssistant.class)); startService(new Intent(this, ServiceDuelAssistant.class));
} }
//萌卡 //萌卡
StartMycard(); StartMycard();
} }
......
package cn.garymb.ygomobile.ui.home; package cn.garymb.ygomobile.ui.home;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Color; import android.graphics.Color;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityCompat;
import android.support.v4.app.NotificationManagerCompat;
import java.io.IOException; import java.io.IOException;
...@@ -25,6 +30,7 @@ import cn.garymb.ygomobile.ui.plus.VUiKit; ...@@ -25,6 +30,7 @@ import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.ComponentUtils; import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.IOUtils; import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.NetUtils; import cn.garymb.ygomobile.utils.NetUtils;
import cn.garymb.ygomobile.utils.PermissionUtil;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD; import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE; import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE;
...@@ -53,12 +59,13 @@ public class MainActivity extends HomeActivity{ ...@@ -53,12 +59,13 @@ public class MainActivity extends HomeActivity{
ActivityCompat.requestPermissions(this, PERMISSIONS, 0); ActivityCompat.requestPermissions(this, PERMISSIONS, 0);
} }
@SuppressLint("StringFormatMatches")
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
for(int i=0;i<permissions.length;i++){ for(int i=0;i<permissions.length;i++){
if(grantResults[i] == PackageManager.PERMISSION_DENIED){ if(grantResults[i] == PackageManager.PERMISSION_DENIED){
showToast(R.string.tip_no_permission); showToast(getString(R.string.tip_no_permission,permissions[i]));
break; break;
} }
} }
...@@ -75,7 +82,7 @@ public class MainActivity extends HomeActivity{ ...@@ -75,7 +82,7 @@ public class MainActivity extends HomeActivity{
} }
if (isNew) { if (isNew) {
if (!getGameUriManager().doIntent(getIntent())) { if (!getGameUriManager().doIntent(getIntent())) {
new DialogPlus(this) DialogPlus dialog= new DialogPlus(this)
.setTitleText(getString(R.string.settings_about_change_log)) .setTitleText(getString(R.string.settings_about_change_log))
.loadUrl("file:///android_asset/changelog.html", Color.TRANSPARENT) .loadUrl("file:///android_asset/changelog.html", Color.TRANSPARENT)
.hideButton() .hideButton()
...@@ -87,12 +94,21 @@ public class MainActivity extends HomeActivity{ ...@@ -87,12 +94,21 @@ public class MainActivity extends HomeActivity{
mImageUpdater.start(); mImageUpdater.start();
} }
} }
}) });
.show(); dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
PermissionUtil.isServicePermission(MainActivity.this,true);
}
});
dialog.show();
} }
} else { } else {
PermissionUtil.isServicePermission(MainActivity.this,true);
getGameUriManager().doIntent(getIntent()); getGameUriManager().doIntent(getIntent());
} }
}); });
} }
......
...@@ -2,16 +2,21 @@ package cn.garymb.ygomobile.ui.plus; ...@@ -2,16 +2,21 @@ package cn.garymb.ygomobile.ui.plus;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.graphics.PixelFormat; import android.graphics.PixelFormat;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.provider.Settings;
import android.support.v4.app.NotificationCompat;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
...@@ -35,9 +40,11 @@ import cn.garymb.ygomobile.bean.ServerList; ...@@ -35,9 +40,11 @@ import cn.garymb.ygomobile.bean.ServerList;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.adapters.ServerListAdapter; import cn.garymb.ygomobile.ui.adapters.ServerListAdapter;
import cn.garymb.ygomobile.ui.cards.CardSearchAcitivity; import cn.garymb.ygomobile.ui.cards.CardSearchAcitivity;
import cn.garymb.ygomobile.ui.home.HomeActivity;
import cn.garymb.ygomobile.ui.home.MainActivity; import cn.garymb.ygomobile.ui.home.MainActivity;
import cn.garymb.ygomobile.ui.home.ServerListManager; import cn.garymb.ygomobile.ui.home.ServerListManager;
import cn.garymb.ygomobile.utils.IOUtils; import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.PermissionUtil;
import cn.garymb.ygomobile.utils.XmlUtils; import cn.garymb.ygomobile.utils.XmlUtils;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST; import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
...@@ -52,7 +59,7 @@ public class ServiceDuelAssistant extends Service { ...@@ -52,7 +59,7 @@ public class ServiceDuelAssistant extends Service {
private final static String CMD_STOP_SERVICE = "CMD : STOP SERVICE"; private final static String CMD_STOP_SERVICE = "CMD : STOP SERVICE";
public static String cardSearchMessage=""; public static String cardSearchMessage = "";
private LinearLayout mFloatLayout; private LinearLayout mFloatLayout;
private TextView ds_text; private TextView ds_text;
...@@ -60,6 +67,7 @@ public class ServiceDuelAssistant extends Service { ...@@ -60,6 +67,7 @@ public class ServiceDuelAssistant extends Service {
//卡查关键字 //卡查关键字
private String[] cardSearchKey = new String[]{"?", "?"}; private String[] cardSearchKey = new String[]{"?", "?"};
//是否可以移除悬浮窗上面的视图 //是否可以移除悬浮窗上面的视图
private boolean isdis = false; private boolean isdis = false;
String[] passwordPrefix = { String[] passwordPrefix = {
...@@ -71,7 +79,7 @@ public class ServiceDuelAssistant extends Service { ...@@ -71,7 +79,7 @@ public class ServiceDuelAssistant extends Service {
"M#", "m#", "M#", "m#",
"T#", "t#", "T#", "t#",
"PR#", "pr#", "PR#", "pr#",
"NS#","ns#", "NS#", "ns#",
"S#", "s#", "S#", "s#",
"AI#", "ai#", "AI#", "ai#",
"LF2#", "lf2#", "LF2#", "lf2#",
...@@ -157,24 +165,27 @@ public class ServiceDuelAssistant extends Service { ...@@ -157,24 +165,27 @@ public class ServiceDuelAssistant extends Service {
// TODO: Implement this method // TODO: Implement this method
super.onCreate(); super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.notification_view_duel_assistant);
Intent intent = new Intent(this, this.getClass());
intent.setAction(DUEL_ASSISTANT_SERVICE_ACTION);
PendingIntent pendingIntent;
intent.putExtra(CMD_NAME, CMD_START_GAME); if (PermissionUtil.isNotificationListenerEnabled(this)) {
pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.notification_view_duel_assistant);
remoteViews.setOnClickPendingIntent(R.id.notification_view_duel_assistant, pendingIntent); Intent intent = new Intent(this, this.getClass());
intent.setAction(DUEL_ASSISTANT_SERVICE_ACTION);
PendingIntent pendingIntent;
intent.putExtra(CMD_NAME, CMD_START_GAME);
pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.notification_view_duel_assistant, pendingIntent);
intent.putExtra(CMD_NAME, CMD_STOP_SERVICE); intent.putExtra(CMD_NAME, CMD_STOP_SERVICE);
pendingIntent = PendingIntent.getService(this, 2, intent, PendingIntent.FLAG_UPDATE_CURRENT); pendingIntent = PendingIntent.getService(this, 2, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.buttonStopService, pendingIntent); remoteViews.setOnClickPendingIntent(R.id.buttonStopService, pendingIntent);
Notification.Builder builder = new Notification.Builder(this); Notification.Builder builder = new Notification.Builder(this, "决斗助手状态");
builder.setSmallIcon(R.drawable.ic_icon); builder.setSmallIcon(R.drawable.ic_icon);
builder.setCustomContentView(remoteViews); builder.setCustomContentView(remoteViews);
startForeground(1, builder.build()); startForeground(1, builder.build());
}
} }
//lc = new ArrayList<Card>(); //lc = new ArrayList<Card>();
...@@ -210,6 +221,9 @@ public class ServiceDuelAssistant extends Service { ...@@ -210,6 +221,9 @@ public class ServiceDuelAssistant extends Service {
} }
if (start != -1) { if (start != -1) {
//如果有悬浮窗权限再显示
if (PermissionUtil.isServicePermission(ServiceDuelAssistant.this,false))
joinRoom(clipMessage, start); joinRoom(clipMessage, start);
} else { } else {
for (String s : cardSearchKey) { for (String s : cardSearchKey) {
......
package cn.garymb.ygomobile.utils;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.NotificationManagerCompat;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
public class PermissionUtil {
//判断应用是否开启了通知权限
public static boolean isNotificationListenerEnabled(Context context) {
return NotificationManagerCompat.from(context).areNotificationsEnabled();
}
public static DialogPlus isNotificationPermission(Context context){
if(!isNotificationListenerEnabled(context)){
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle("权限缺失提示");
dialog.setMessage("喵没给通知权限呢~\n开启通知权限可以快速关闭决斗助手功能");
dialog.setLeftButtonText("去开启");
dialog.setRightButtonText("取消");
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 根据isOpened结果,判断是否需要提醒用户跳转AppInfo页面,去打开App通知权限
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", App.get().getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
dialog.dismiss();
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.show();
return dialog;
}
return null;
}
//判断是否有悬浮窗权限
public static boolean isServicePermission(Context context, boolean isIntentPermission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(context)) {
if (isIntentPermission) {
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle("权限缺失提示");
dialog.setMessage("喵没给悬浮窗权限呢~\n开启悬浮窗权限可进行快速加入决斗房间");
dialog.setLeftButtonText("去开启");
dialog.setRightButtonText("取消");
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
context.startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION));
dialog.dismiss();
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
isNotificationPermission(context);
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.show();
}
return false;
}
}
return true;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment