我正在为 Android 5+ (>= API 21) 构建一个 Launcher-Kiosk 应用程序,使用设备所有者来设置设备,管理允许使用的应用程序列表,自动启动 Kiosk。应用程序位于 GridView 中。用户单击一个应用程序图标,它会启动该应用程序。
到目前为止,一切都很好。
但是,从这个周末开始,当我处于信息亭模式时,应用程序不会启动。启动器没问题,如果我禁用信息亭模式,应用程序就会启动。
它不再适用于 Android 5(6+ 可以)。使用 API 21 在不同的设备和模拟器上进行了尝试。
我多次检查了我的应用程序的源代码。周末没有任何变化。我已经尝试过以前版本的代码,它不再工作了。我尝试了这个示例,添加了一个按钮来启动应用程序并添加了PackageName
in 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();
}
}
如果禁用任务锁,电子邮件应用程序将启动。当任务锁打开时,它不会。
它以前工作过。你有什么想法,怎么可能?
如果您需要更多我的代码,请告诉我...
非常感谢 !:)