DevicePolicyManager.lockNow () non funziona per i tablet Motorola
-
13-11-2019 - |
Domanda
public final static void lockDevice()
{
try
{
if (devicePolicyManager.isAdminActive(adminComponent))
{
devicePolicyManager.lockNow();
}
}
catch (final Exception ex)
{
...
}
}
Il codice sopra non lancia alcuna eccezione né blocca lo schermo solo per i tablet Motorola Xoom. (Sia homeycomb che imecream sandwitch) Lo stesso codice funziona perfettamente su altri tablet Homeycomb e ICS.
Ho cercato su Google, ma non ho ottenuto alcuna soluzione. Qualche idea.....?
Soluzione
Possibili ragioni per questo problema
1) Penso che ci sia qualche problema con il ricevitore Meta-Data nel tuo Androidmanifest.xml
2) Non hai aggiunto la classe corretta (estesa con DeviceadMinReceiver) a Admincomponent o ad Android: nome Proprietà del ricevitore.
Dopo aver trascorso molto tempo su questo ho creato il codice.
Codice per l'attività principale
public class LockerTest extends Activity {
protected static final int REQUEST_ENABLE = 0;
DevicePolicyManager devicePolicyManager;
ComponentName adminComponent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.btn);
button.setOnClickListener(btnListener);
}
Button.OnClickListener btnListener = new Button.OnClickListener() {
public void onClick(View v) {
adminComponent = new ComponentName(LockerTest.this, Darclass.class);
devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (!devicePolicyManager.isAdminActive(adminComponent)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponent);
startActivityForResult(intent, REQUEST_ENABLE);
} else {
devicePolicyManager.lockNow();
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (REQUEST_ENABLE == requestCode) {
super.onActivityResult(requestCode, resultCode, data);
}
}
}
Crea una nuova classe - Darclass - Code
import android.app.admin.DeviceAdminReceiver;
public class Darclass extends DeviceAdminReceiver{
}
Crea una cartella "XML" in "Res". Quindi crea il file my_admin.xml nella cartella 'XML'. Codice per my_admin.xml. Nota Aggiungi questo ricevitore dopo </activity>
e prima </application>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>
Aggiungi infine il ricevitore dato il muggito al tuo AndroidManifest.xml
<receiver
android:name=".Darclass"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
Dovrebbe funzionare sul tuo dispositivo.