0

我正在为 Android 5+ (>= API 21) 构建一个 Launcher-Kiosk 应用程序,使用设备所有者来设置设备,管理允许使用的应用程序列表,自动启动 Kiosk。应用程序位于 GridView 中。用户单击一个应用程序图标,它会启动该应用程序。

到目前为止,一切都很好。

但是,从这个周末开始,当我处于信息亭模式时,应用程序不会启动。启动器没问题,如果我禁用信息亭模式,应用程序就会启动。

它不再适用于 Android 5(6+ 可以)。使用 API 21 在不同的设备和模拟器上进行了尝试。

我多次检查了我的应用程序的源代码。周末没有任何变化。我已经尝试过以前版本的代码,它不再工作了。我尝试了这个示例,添加了一个按钮来启动应用程序并添加了PackageNamein setLockTaskPackages. 不工作。即使是 Test-DPC 也不允许没有 API 23+ (Android M) 的信息亭模式

我创建了一个新的 Android 项目,只是为了尝试不使用其余代码,但也无法正常工作。这是代码(简单的新项目,一键启动应用程序,应用程序通过 adb 设置为设备所有者):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button1 = (Button) findViewById(R.id.button1);

        DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        final String[] kioskApps = new String[2];
        kioskApps[0] = getPackageName();
        kioskApps[1] = "com.android.email";
        ComponentName deviceAdmin = new ComponentName(this, DeviceOwnerReceiver.class);
        assert dpm != null;
        dpm.setLockTaskPackages(deviceAdmin, kioskApps);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent launchIntent = getPackageManager().getLaunchIntentForPackage(kioskApps[1]);
                if (launchIntent != null) {
                    launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(launchIntent);//null pointer check in case package name was not found
                }
            }
        });

        startLockTask();
    }
}

如果禁用任务锁,电子邮件应用程序将启动。当任务锁打开时,它不会。

它以前工作过。你有什么想法,怎么可能?

如果您需要更多我的代码,请告诉我...

非常感谢 !:)

4

0 回答 0