相关疑难解决方法(0)

如何以编程方式"重启"Android应用程序?

首先,我知道不应该在Android上杀死/重启应用程序.在我的用例中,我想在服务器向客户端发送特定信息的特定情况下出厂重置我的应用程序.

用户只能使用应用程序的一个实例登录服务器(即不允许多个设备).如果另一个实例获得"登录"锁定,那么该用户的所有其他实例都必须删除其数据(工厂重置),以保持一致性.

可以强制获取锁定,因为用户可能会删除应用程序并重新安装它,这将导致不同的实例ID,并且用户将无法再释放锁定.因此可以强行锁定.

由于这种力的可能性,我们需要始终检查具有锁定的具体实例.这是(几乎)对服务器的每个请求完成的.服务器可能会发送"error-lock-id".如果检测到,则客户端应用程序必须删除所有内容.


那是用例.不执行问题:

我有一个ActivityA启动Login ActivityL或应用程序的主ActivityB,具体取决于sharedPrefs字段.在启动L或B后,它自行关闭,只有L或B运行.因此,在用户已登录的情况下,B现在正在运行.

B开始C. C调用startServiceIntentServiceD.导致这个堆栈:

(A)> B> C> D.

从D的onHandleIntent方法,事件被发送到ResultReceiver R.

R现在通过向用户提供一个对话框来处理该事件,在该对话框中他可以选择出厂重置应用程序(删除数据库,sharedPrefs等)

出厂重置后,我想重新启动应用程序(关闭所有活动),然后再次启动A,然后启动登录ActivityL并自行完成:

(A)> L.

Dialog的onClick方法如下所示:

@Override
public void onClick(DialogInterface dialog, int which) {

    // Will call onCancelListener
    MyApplication.factoryReset(); // (Deletes the database, clears sharedPrefs, etc.)
    Intent i = new Intent(MyApp.getContext(), A.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    MyApp.getContext().startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

这就是MyApp班级:

public class MyApp extends Application {
    private static Context context;

    @Override
    public void onCreate() { …
Run Code Online (Sandbox Code Playgroud)

android android-activity

211
推荐指数
16
解决办法
21万
查看次数

如果用户在显示通知时尝试授予权限,则会显示Android"屏幕覆盖检测到"消息

我在Nexus 6上安装了Android Marshmallow.我正在尝试解决以下问题:

如果用户在显示通知时尝试授予权限,则会显示"检测到屏幕覆盖"消息,并且"请求权限"对话框消失 - 当然,应用程序未获得所请求的权限.(查看截图)

我尝试通过添加"DRAW OVER OTHER APPS"权限来解决问题 - android.permission.SYSTEM_ALERT_WINDOW到清单但没有运气.

PS:我确定问题是由通知引起的.我没有安装任何覆盖其他应用程序的应用程序,我甚至在设置中使用"Draw over other apps"权限关闭了所有应用程序.没有帮助..

有人知道这个问题的解决方案吗?

在此输入图像描述

permissions android android-6.0-marshmallow

79
推荐指数
4
解决办法
8万
查看次数

如何在我的活动上提供屏幕覆盖权限

在我的应用程序中我得到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)

android android-6.0-marshmallow

14
推荐指数
2
解决办法
2万
查看次数