我正在尝试在我的应用程序中创建一个"注销"功能.基本上,通过注销,应清除应用程序数据.我想要做的是在注销后,应用程序应该重新启动,以便可以再次输入凭据等.我遇到的问题是,当用户单击"注销"时,应用程序已经运行了3-4个活动,我不知道如何退回它们.我如何(模拟?)重新启动应用程序?
我有一个AsyncTask对象,它在创建活动时开始执行,并在后台执行操作(下载最多100个图像).一切都很好,但有一种我不能理解的特殊行为.
例如:当Android屏幕的方向发生变化时,活动将被销毁并再次创建.所以我重写onRetainNonConfigurationInstance()方法并保存在AsyncTask中执行的所有下载数据.我这样做的目的是每次在方向更改期间销毁活动时都不会运行AsyncTask,但正如我在日志中可以看到的,之前的AsyncTask仍然在执行.(虽然数据保存正确)
我甚至尝试在活动的onDestroy()方法中取消AsyncTask,但日志仍然显示AsyncTask正在运行.
这是非常奇怪的行为,如果有人能告诉我停止/取消AsyncTask的正确程序,真的很感激.
谢谢
由于未知原因,我无法正确地离开应用程序,因此当我再次按下主页按钮和应用程序图标时,我会恢复应用程序中的位置.我想强制应用程序在第一个Activity上重新启动.
我想这与onDestroy()或者onPause()有关,但我不知道该怎么做.
在生产模式中,有没有办法强制完全重启应用程序(我不是在讨论开发时的热重载!).
实际使用案例:
在初始化过程中,应用程序检测到没有网络连接.缺乏网络连接可能阻止了正确的启动(例如加载外部资源,如JSON文件......).
在最初的握手过程中,需要下载一些重要资源的新版本(更新类型).
在这两种用例中,我希望应用程序继续完全重启,而不是必须在ApplicationState级别构建复杂的逻辑.
非常感谢您的提示.
在我的应用程序中我得到Android 6+中的屏幕覆盖问题我试图打开但是为此我需要为屏幕覆盖提供权限
我跟着这个我无法融入我的活动
我也试过这两个似乎都在工作,所以我想在我的活动中整合它们
这是我的活动:
public class MainActivity extends Activity {
public static final int R_PERM = 123;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
if ((CheckPermission(this, Manifest.permission.CAMERA)) &&
(CheckPermission(this, Manifest.permission.READ_PHONE_STATE)) &&
(CheckPermission(this, Manifest.permission.NFC))) {
PermHandling();
} else {
RequestPermission(MainActivity.this, Manifest.permission.CAMERA, R_PERM);
RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, R_PERM);
RequestPermission(MainActivity.this, Manifest.permission.NFC, R_PERM);
//NewPermHandling();
}
}
private void PermHandling() {
//My app internal parts....
//Here my stuff works...
}
//private void NewPermHandling(){
//}
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序将自己注册为默认启动器并在启动时自动固定.
安装应用程序时一切正常.它自己固定,只有后退按钮可见.
问题是当设备首次启动时,它无法正确固定.我多次看到一系列祝酒词"Screen pinned"和"Screen unpinned"."主页"和"近期任务"按钮仍然可见.
-
运行"adb shell dumpsys活动活动" - 最后一行表示它没有固定:
mLockTaskModeState=NONE mLockTaskPackages (userId:packages)=
0:[com.example.myapp]
mLockTaskModeTasks[]
Run Code Online (Sandbox Code Playgroud)
-
测试设备华硕ZenPad运行Marshmallow/6.0/23
我依靠MainActivity清单属性"lockTaskMode"来固定(而不是activity.startLockTask()):
<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/launcher_main"
android:launchMode="singleTask"
android:lockTaskMode="if_whitelisted"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
任何帮助或指示将不胜感激
在我的应用程序中,我要求允许访问Android SDK 23中的SMS(运行时权限),但问题是显示对话框屏幕覆盖并且未授予访问权限.i禁用所有其他应用程序覆盖但没有任何更改.我找到了这个 链接,但没有帮助
问题是如何以编程方式修复它?
我想通过待处理意图重新启动我的应用程序。下面的代码不起作用。
val intent = Intent(this, Activity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
}
val pendingIntentId = 1
val pendingIntent = PendingIntent.getActivity(this, pendingIntentId, intent, PendingIntent.FLAG_CANCEL_CURRENT)
val mgr = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val timeToStart = System.currentTimeMillis() + 1000L
mgr.set(AlarmManager.RTC, timeToStart, pendingIntent)
exitProcess(0)
Run Code Online (Sandbox Code Playgroud)
目标版本是 31,因此更新了未决意图,但PendingIntent.FLAG_MUTABLE仍然不起作用。我搜索了许多与此相关的链接,但没有运气。
2022 年 11 月,当目标版本为 31 且最低 sdk 版本为 29 时,上述待处理意图代码不会重新启动应用程序。
除了重新启动活动之外,还有为什么上述未决意图不起作用的任何线索或任何其他建议吗?我不想使用重新启动startActivity(intent)
这是对这个问题的后续问题:
我试图从像这样的片段重新启动我的应用程序:
Toast.makeText(getActivity(), "Restarting app", Toast.LENGTH_SHORT).show();
Intent i = getActivity().getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getActivity().getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
getActivity().finish();
Run Code Online (Sandbox Code Playgroud)
代码什么也没做.这finish()是唯一有用的原因.如果我删除finish(),没有任何反应.这是为什么?