startActivity () не работает внутри интерфейса Runnable - PullRequest
0 голосов
/ 01 марта 2020

У меня есть класс обслуживания (SaveMyAppsService.java) в моем проекте, который после запуска проверит для приложения переднего плана, если имя пакета текущего приложения переднего плана совпадает с List<String> lockedApps, который содержит имена пакетов заблокированных приложений, он должен запустить другой активность CustomPinActivity но не работает! PS: я могу видеть журналы mytag в Logcat.

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        lockedApps = AppPref.getInstance().getAppList(getApplicationContext());

            String localPackName = checkRunningApps(); //returns package name of the current foreground app.

            if( lockedApps.contains(localPackName) ){
                Log.i("mytag","yes this is in lockedApps pref");

                if( !allowedApps.contains( localPackName )){
                    Log.i("mytag","It was not allowed!!!!!!!!!!!!!!!!!!!!!!!!! but now it is");
                    allowedApps.add( localPackName );
                    previousAppName = localPackName;
                    Intent intent  = new Intent(SaveMyAppsService.this.getApplicationContext(), CustomPinActivity.class);
                    intent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
                    intent.putExtra("package",checkRunningApps());
                    startActivity( intent );
                    checkAllowed();
                }
            }
    }
}, 0, 300, TimeUnit.MILLISECONDS);

1 Ответ

0 голосов
/ 01 марта 2020

Я думаю, вы должны использовать обработчик следующим образом:

    private final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Bundle bundle = msg.getData();
        String localPackName = bundle.getString(AppLock.EXTRA_TYPE);
        Intent intent  = new Intent(SaveMyAppsService.this.getApplicationContext(), CustomPinActivity.class);
        intent.putExtra(AppLock.EXTRA_TYPE, AppLock.UNLOCK_PIN);
        intent.putExtra("package",localPackName);
        startActivity( intent );
        checkAllowed();
    }
};

и ваш код обновлен:

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
    lockedApps = AppPref.getInstance().getAppList(getApplicationContext());

        String localPackName = checkRunningApps(); //returns package name of the current foreground app.

        if( lockedApps.contains(localPackName) ){
            Log.i("mytag","yes this is in lockedApps pref");

            if( !allowedApps.contains( localPackName )){
                Log.i("mytag","It was not allowed!!!!!!!!!!!!!!!!!!!!!!!!! but now it is");
                allowedApps.add( localPackName );
                previousAppName = localPackName;
                Message msg = mHandler.obtainMessage();
                Bundle bundle = new Bundle();
                bundle.putString(AppLock.EXTRA_TYPE, localPackName);
                msg.setData(bundle);
                mHandler.sendMessage(msg);
            }
        }
}
}, 0, 300, TimeUnit.MILLISECONDS);
...