打开系统通知设置
This commit is contained in:
parent
cfe4acbb78
commit
8b37a63a4a
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<application
|
||||
android:name=".VidiDinApp"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package com.gamedog.vididin
|
||||
|
||||
object VidiConst {
|
||||
const val URL_DISCORD: String = "https://www.baidu.com"
|
||||
|
||||
/**
|
||||
* 描述:网络常量
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.gamedog.vididin.main.fragments
|
||||
|
||||
import android.Manifest
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.ViewCompat
|
||||
|
|
@ -9,11 +10,14 @@ import androidx.fragment.app.viewModels
|
|||
import androidx.lifecycle.lifecycleScope
|
||||
import com.ama.core.architecture.appBase.AppViewsFragment
|
||||
import com.ama.core.architecture.appBase.OnFragmentBackgroundListener
|
||||
import com.ama.core.architecture.util.AndroidUtil
|
||||
import com.ama.core.architecture.util.ResUtil
|
||||
import com.ama.core.architecture.util.eventbus.NotifyMan
|
||||
import com.ama.core.architecture.util.permission.PermissionUtil
|
||||
import com.ama.core.architecture.util.setOnClickBatch
|
||||
import com.ama.core.architecture.util.setStatusBarDarkFont
|
||||
import com.gamedog.vididin.R
|
||||
import com.gamedog.vididin.VidiConst
|
||||
import com.gamedog.vididin.VididinEvents
|
||||
import com.gamedog.vididin.core.login.login.AccountManager
|
||||
import com.gamedog.vididin.main.WatchVideoDialog
|
||||
|
|
@ -56,7 +60,8 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
|
|||
|
||||
override fun ViewBinding.initViews() {
|
||||
with(binding) {
|
||||
setOnClickBatch(ivGotoDailySign, llTaskBenefit, llTaskWatchVideo, llTaskGame, llTaskZerobuy, tvWatchVideo, tvWithdraw) {
|
||||
setOnClickBatch(ivGotoDailySign, llTaskBenefit, llTaskWatchVideo, llTaskGame,
|
||||
llTaskZerobuy, tvWatchVideo, tvWithdraw) {
|
||||
when(this) {
|
||||
ivGotoDailySign->{
|
||||
DailySignDialog(requireActivity()).show()
|
||||
|
|
@ -211,11 +216,21 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
|
|||
}
|
||||
|
||||
private fun gotoDiscord() {
|
||||
//TODO("Not yet implemented")
|
||||
AndroidUtil.openUrl(VidiConst.URL_DISCORD)
|
||||
}
|
||||
|
||||
private fun gotoNotification() {
|
||||
//TODO("Not yet implemented")
|
||||
PermissionUtil.checkPermission(Manifest.permission.POST_NOTIFICATIONS, object : PermissionUtil.ICallback() {
|
||||
override fun onAllGranted() {
|
||||
AndroidUtil.openAppNotifySettings()
|
||||
}
|
||||
|
||||
override fun onPartialGranted() {
|
||||
}
|
||||
|
||||
override fun onAllRejected() {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private fun gotoWithVideo() {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application>
|
||||
<activity android:name=".util.permission.PermissionActivity" android:exported="false" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.startup.InitializationProvider"
|
||||
android:authorities="${applicationId}.androidx-startup"
|
||||
|
|
@ -13,4 +15,6 @@
|
|||
android:value="androidx.startup" />
|
||||
</provider>
|
||||
</application>
|
||||
|
||||
|
||||
</manifest>
|
||||
|
|
@ -1,9 +1,17 @@
|
|||
package com.ama.core.architecture.util
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.widget.Toast
|
||||
import com.ama.core.architecture.BaseApp
|
||||
import kotlin.random.Random
|
||||
|
||||
|
||||
class AndroidUtil private constructor() {
|
||||
|
||||
companion object {
|
||||
|
|
@ -22,8 +30,47 @@ class AndroidUtil private constructor() {
|
|||
Toast.makeText(BaseApp.appContext(), str, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
fun openUrl(url: String) {
|
||||
val appContext = BaseApp.appContext()
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||
intent.flags = FLAG_ACTIVITY_NEW_TASK
|
||||
if (intent.resolveActivity(appContext.packageManager) != null) {
|
||||
appContext.startActivity(intent)
|
||||
} else {
|
||||
Toast.makeText(appContext, "No available browser", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
fun openAppNotifySettings() {
|
||||
val context = BaseApp.appContext()
|
||||
val intent = Intent()
|
||||
intent.flags = FLAG_ACTIVITY_NEW_TASK
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android >=8
|
||||
intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
|
||||
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
|
||||
intent.putExtra(Settings.EXTRA_CHANNEL_ID, context.applicationInfo.uid)
|
||||
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Android 5.0-7.1
|
||||
intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
|
||||
intent.putExtra("app_package", context.packageName)
|
||||
intent.putExtra("app_uid", context.applicationInfo.uid)
|
||||
}
|
||||
|
||||
context.startActivity(intent)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
val fallbackIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
fallbackIntent.data = Uri.fromParts("package", context.packageName, null)
|
||||
context.startActivity(fallbackIntent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
package com.ama.core.architecture.util.permission;
|
||||
|
||||
|
||||
|
||||
import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION;
|
||||
import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION_EXTRA_RESULT;
|
||||
import static com.ama.core.architecture.util.permission.PermissionUtil.PERMISSION_BROADCAST_ACTION_EXTRA_UUID;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import com.ama.core.architecture.R;
|
||||
import com.ama.core.architecture.util.ResUtil;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class PermissionActivity extends AppCompatActivity {
|
||||
public static final int PERMISSION_REQUEST_CODE = 1000;
|
||||
private static final String PERMISSION_TOTAL_REJECTED_HINT = ResUtil.INSTANCE.getString(R.string.permission_hint);
|
||||
|
||||
public static final String EXTRA_PERMISSION = "extra_permission";
|
||||
public static final String EXTRA_ACTION_UUID = "extra_callback";
|
||||
|
||||
private String mActionUUID;
|
||||
private ArrayList<String> mPermissionList;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setStatusBarColor(this, Color.TRANSPARENT);
|
||||
setNavigationBarColor(this, Color.TRANSPARENT);
|
||||
|
||||
mActionUUID = getIntent().getStringExtra(EXTRA_ACTION_UUID);
|
||||
mPermissionList = getIntent().getStringArrayListExtra(EXTRA_PERMISSION);
|
||||
startRequest();
|
||||
}
|
||||
|
||||
|
||||
private void startRequest() {
|
||||
if (mActionUUID == null || mPermissionList == null && mPermissionList.size() <= 0) {
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
ActivityCompat.requestPermissions(PermissionActivity.this,
|
||||
mPermissionList.toArray(new String[mPermissionList.size()]), PERMISSION_REQUEST_CODE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode,
|
||||
@NonNull String[] permissions,
|
||||
@NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
if (PERMISSION_REQUEST_CODE == requestCode) {
|
||||
if (grantResults == null || grantResults.length <= 0) {
|
||||
sendResultBroadCast(PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
|
||||
} else {
|
||||
int grantedCount = 0;
|
||||
int unGrantedCount = 0;
|
||||
for (int result : grantResults) {
|
||||
if (result == PackageManager.PERMISSION_GRANTED) {
|
||||
grantedCount++;
|
||||
} else {
|
||||
unGrantedCount++;
|
||||
}
|
||||
}
|
||||
|
||||
if (unGrantedCount <= 0) {
|
||||
sendResultBroadCast(PermissionUtil.PERMISSION_RESULT_ALL_GRANTED);
|
||||
} else {
|
||||
int finalGrantedCount = grantedCount;
|
||||
StringBuilder unGrantedPermissionsStr = new StringBuilder();
|
||||
for (int i=0; i<permissions.length; i++) {
|
||||
if (grantResults[i] != PackageManager.PERMISSION_GRANTED
|
||||
&& permissions[i].contains(".")
|
||||
&& !permissions[i].endsWith(".")) {
|
||||
|
||||
unGrantedPermissionsStr.append("[" + permissions[i].substring(permissions[i].lastIndexOf(".") + 1) + "] ");
|
||||
}
|
||||
}
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle("权限已被拒绝")
|
||||
.setMessage(PERMISSION_TOTAL_REJECTED_HINT + unGrantedPermissionsStr)
|
||||
.setPositiveButton("系统设置", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Uri packageURI = Uri.parse("package:" + getPackageName());
|
||||
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
|
||||
startActivity(intent);
|
||||
|
||||
sendResultBroadCast(finalGrantedCount > 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
|
||||
}
|
||||
})
|
||||
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
sendResultBroadCast(finalGrantedCount > 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
|
||||
}
|
||||
})
|
||||
.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
sendResultBroadCast(finalGrantedCount > 0 ? PermissionUtil.PERMISSION_RESULT_PARTIAL_GRANTED : PermissionUtil.PERMISSION_RESULT_ALL_REJECTED);
|
||||
}
|
||||
})
|
||||
.create()
|
||||
.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 用户选择了"不再询问", 引导用户跳转系统设置
|
||||
*/
|
||||
private void showJump2SystemSettingDialog() {
|
||||
|
||||
|
||||
|
||||
// new
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle("权限已被拒绝")
|
||||
.setMessage(mPermissionList + PERMISSION_TOTAL_REJECTED_HINT)
|
||||
.setPositiveButton("系统设置", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
Uri packageURI = Uri.parse("package:" + getPackageName());
|
||||
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI);
|
||||
startActivity(intent);
|
||||
}
|
||||
})
|
||||
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
}
|
||||
})
|
||||
.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
}
|
||||
})
|
||||
.create()
|
||||
.show();
|
||||
}
|
||||
|
||||
|
||||
private void sendResultBroadCast(int permissionResult) {
|
||||
Intent intent = new Intent(PERMISSION_BROADCAST_ACTION);
|
||||
intent.putExtra(PERMISSION_BROADCAST_ACTION_EXTRA_RESULT, permissionResult);
|
||||
intent.putExtra(PERMISSION_BROADCAST_ACTION_EXTRA_UUID, mActionUUID);
|
||||
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//******************************** Static Methods *********************************//
|
||||
private static void setStatusBarColor(Activity activity, int colorId) {
|
||||
Window window = activity.getWindow();
|
||||
window.setStatusBarColor(colorId);
|
||||
}
|
||||
|
||||
private static void setNavigationBarColor(Activity activity, int colorId) {
|
||||
Window window = activity.getWindow();
|
||||
window.setNavigationBarColor(colorId);
|
||||
}
|
||||
|
||||
private static void setTranslucentStatus(Window window) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
View decorView = window.getDecorView();
|
||||
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
|
||||
decorView.setSystemUiVisibility(option);
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
WindowManager.LayoutParams attributes = window.getAttributes();
|
||||
int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
||||
attributes.flags |= flagTranslucentStatus;
|
||||
window.setAttributes(attributes);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
package com.ama.core.architecture.util.permission;
|
||||
|
||||
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
|
||||
import com.ama.core.architecture.BaseApp;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PermissionUtil {
|
||||
public static final int PERMISSION_RESULT_ALL_GRANTED = 1;
|
||||
public static final int PERMISSION_RESULT_PARTIAL_GRANTED = 2;
|
||||
public static final int PERMISSION_RESULT_ALL_REJECTED = 3;
|
||||
|
||||
|
||||
|
||||
public static final String PERMISSION_BROADCAST_ACTION = "permission_broadcast_action";
|
||||
public static final String PERMISSION_BROADCAST_ACTION_EXTRA_UUID = "permission_broadcast_action_extra_uuid";
|
||||
public static final String PERMISSION_BROADCAST_ACTION_EXTRA_RESULT = "permission_broadcast_action_extra_result";
|
||||
|
||||
|
||||
public static abstract class ICallback implements Serializable {
|
||||
public abstract void onAllGranted();
|
||||
public abstract void onPartialGranted();
|
||||
public abstract void onAllRejected();
|
||||
}
|
||||
|
||||
public static void checkPermission(@NonNull String permission,
|
||||
@NonNull ICallback callback) {
|
||||
if (!TextUtils.isEmpty(permission)) {
|
||||
checkPermission(new String[]{permission}, callback);
|
||||
}
|
||||
}
|
||||
|
||||
public static void checkPermission(@NonNull String[] permissionArr,
|
||||
@NonNull ICallback callback) {
|
||||
if (permissionArr == null || permissionArr.length == 0) {
|
||||
callback.onAllGranted();
|
||||
return;
|
||||
}
|
||||
|
||||
String actionUUID = UUID.randomUUID().toString();
|
||||
regisBroadcast(actionUUID, callback);
|
||||
|
||||
Intent intent = new Intent(BaseApp.Companion.appContext(), PermissionActivity.class);
|
||||
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(PermissionActivity.EXTRA_ACTION_UUID, actionUUID);
|
||||
intent.putStringArrayListExtra(PermissionActivity.EXTRA_PERMISSION, new ArrayList<String>(Arrays.asList(permissionArr)));
|
||||
BaseApp.Companion.appContext().startActivity(intent);
|
||||
}
|
||||
|
||||
private static void regisBroadcast(String actionUUID, ICallback callback) {
|
||||
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(BaseApp.Companion.appContext());
|
||||
broadcastManager.registerReceiver(new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String resultActionUUID = intent.getStringExtra(PERMISSION_BROADCAST_ACTION_EXTRA_UUID);
|
||||
int permissionResult = intent.getIntExtra(PERMISSION_BROADCAST_ACTION_EXTRA_RESULT, PERMISSION_RESULT_ALL_REJECTED);
|
||||
broadcastManager.unregisterReceiver(this);
|
||||
|
||||
if (callback != null && actionUUID.equalsIgnoreCase(resultActionUUID)) {
|
||||
switch (permissionResult) {
|
||||
case PERMISSION_RESULT_ALL_GRANTED:
|
||||
callback.onAllGranted();
|
||||
break;
|
||||
|
||||
case PERMISSION_RESULT_PARTIAL_GRANTED:
|
||||
callback.onPartialGranted();
|
||||
break;
|
||||
|
||||
case PERMISSION_RESULT_ALL_REJECTED:
|
||||
callback.onAllRejected();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}, new IntentFilter(PERMISSION_BROADCAST_ACTION));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -6,4 +6,5 @@
|
|||
<string name="state_error_network_timeout" tools:ignore="ResourceName">The request timed out. Please try again later.</string>
|
||||
<string name="state_error_network_unknown_host" tools:ignore="ResourceName">Unable to connect to server. Please check network connection.</string>
|
||||
<string name="state_error_network_unknown_exception" tools:ignore="ResourceName">Unknown Exception: %1$s</string>
|
||||
<string name="permission_hint">You have to enable the permissions, or the system can\'t works\\n</string>
|
||||
</resources>
|
||||
Loading…
Reference in New Issue