我将我的应用程序注册为设备管理员,具有相应的锁定屏幕权限.我可以访问锁定设备的方法,但无法禁用锁屏.
是否有可用于禁用锁定的API方法?
我正在按照本指南了解如何让我的应用请求成为设备管理员.
这适用于任何带有任何手机的任何4.x安卓版本,但不适用于棒棒糖(我已尝试使用Nexus 5和Nexus 7).
Logcat鞋出现以下错误:
*11-02 07:37:09.649: W/DeviceAdminAdd(10020): Cannot start ADD_DEVICE_ADMIN as a new task*
Run Code Online (Sandbox Code Playgroud)
还有其他人遇到过Lollipop这个问题吗?可能是什么原因?
我已经浏览了指南的所有部分,并确保我的XML,清单,接收器等都是应有的(并且,它确实适用于我尝试过的任何其他版本的操作系统或手机).
如果重要的话,出于兼容性原因,我正在使用目标API = 17和min API = 14编译我的应用程序.
添加清单文件:
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="com.mycompany.permission.NFProvider_WRITE" />
<uses-permission android:name="com.mycompany.permission.NFProvider_READ" />
<uses-permission android:name="android.permission.READ_LOGS" />
<application
android:name="com.mycompany.myapp.Application"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.mycompany.myapp.NFAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin"/>
<intent-filter> …Run Code Online (Sandbox Code Playgroud) android device-admin android-developer-api android-5.0-lollipop
我正在研究安全性应用程序。用户必须输入正确的密码才能卸载应用程序。我已获得应用中设备管理员的许可。但是,当用户尝试安装应用程序时,他/她可以通过停用设备管理员设置来卸载应用程序。
我想当用户激活设备管理员设置,然后应用在设备管理员上设置密码。卸载时,询问密码,然后用户显示设备管理员设置。
有可能吗 如果是的话,请建议我该怎么做,如果不是,请告诉我如何防止用户卸载应用程序。
我正在实施父母和孩子的应用程序
我正在使用设备管理功能来实现此目的。
启用管理员后,我想禁用孩子应用程序中的卸载按钮
这是我的代码。
MainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private PolicyManager policyManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
policyManager = new PolicyManager(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.activate_admin:
if (!policyManager.isAdminActive()) {
Intent activateDeviceAdmin = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
activateDeviceAdmin.putExtra(DevicePolicyManager.ACTION_SET_NEW_PASSWORD,"abcdefgh");
activateDeviceAdmin.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, policyManager.getAdminComponent());
activateDeviceAdmin.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "After activating admin, you will be able to block application uninstallation.");
startActivityForResult(activateDeviceAdmin,
PolicyManager.DPM_ACTIVATION_REQUEST_CODE);
}
break;
case R.id.deactivate_admin:
if (policyManager.isAdminActive())
policyManager.disableAdmin(); …Run Code Online (Sandbox Code Playgroud) 我试图在用户按下按钮时以编程方式锁定设备.我知道我需要使用deviceAdminReciever并且我已经这样做了但是每当我运行它时我的应用程序都会崩溃
以下是我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.MyApp"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".MainActivity"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
</application>
<uses-feature android:name="android.hardware.camera" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
以下是我的java代码:
public class MainActivity extends DeviceAdminReceiver {
public static class MyActivity extends Activity {
protected static final int ACTIVATION_REQUEST = 1;
private ImageButton btn;
private DevicePolicyManager mDPM;
private ComponentName …Run Code Online (Sandbox Code Playgroud) 我想要的是
我希望在我的设置菜单中有一个简单的复选框,如果选中它将启用我的应用程序的设备管理,并将阻止我的应用程序被卸载.
取消选中该复选框将禁用"设备管理".
我的应用程序是关于安全性的,需要保护其免受卸载.我可以为此获得一个简单的解决方案吗?
PS - 我已经阅读了有关这方面的文档,但似乎无法使其正常工作.
是否可以通过编程方式停用(第三方)设备管理员应用程序?
我能够使用 DevicePolicyManager和getActiveAdmins ()检索激活设备管理员的所有应用程序:
final DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
final List<ComponentName> adminList = dpm.getActiveAdmins();
for ( ComponentName app : adminList ) {
Log.d(TAG, "App: ", app.getPackageName());
}
Run Code Online (Sandbox Code Playgroud)
但是,为了停用它们,我无法使用removeActiveAdmin(...),因为它不会删除不属于我自己的应用程序的组件。
我正在考虑使用Intent和startActivity()来打开我想要停用的特定组件的设备管理员停用页面。是否可以?
我想以编程方式设置锁定屏幕密码,然后在执行循环时删除。我已经成功添加了设备管理,有人可以帮助我从应用程序本身设置和取消锁定屏幕密码。以下是我的设备管理工作代码
public class DevicePolicyDemoActivity extends Activity {
static final String TAG = "DevicePolicyDemoActivity";
static final int ACTIVATION_REQUEST = 47; // identifies our request id
DevicePolicyManager devicePolicyManager;
ComponentName demoDeviceAdmin;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Initialize Device Policy Manager service and our receiver class
devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
demoDeviceAdmin = new ComponentName(this, DemoDeviceAdminReceiver.class);
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
demoDeviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Your boss told you to do this"); …Run Code Online (Sandbox Code Playgroud) 更新
我注意到我实际上正在接收NETWORK_LOGS_AVAILABLE意图!问题是,收到它需要很长时间(一个多小时?)。
有没有已知的方法可以增加接收这些事件的频率?
原始问题
我正在尝试处理现在可以onNetworkLogsAvailable在 DeviceAdminReceiver 应用程序中接收意图后读取的 DNS 事件。此功能从 Android 8.0 开始可用。
出于某种原因,即使我成功调用了该setNetworkLoggingEnabled方法,我也从未收到此意图。启用管理员后,我会收到该ACTION_DEVICE_ADMIN_ENABLED事件,但之后就没有其他内容了。
这是我启用网络日志记录的地方:
public class NetworkAdminReceiver extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
DevicePolicyManager manager =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if ( manager == null )
{
throw new IllegalStateException("Unable to get DevicePolicyManager");
}
if (manager.isDeviceOwnerApp(context.getPackageName())) {
manager.setNetworkLoggingEnabled(getWho(context), true);
}
else
{
Toast.makeText(context, "This application is not device owner. DNS logging only works" +
" when this …Run Code Online (Sandbox Code Playgroud) 我需要安装apk文件而不需要Google PlayStore之类的任何用户提示.我知道这个问题已被多次询问,但我仍未找到任何可解答的答案.我只是从我的SD卡安装应用程序,我尝试了以下方式,
public void getInstall(Context context) {
File file = new File(Environment.getExternalStorageDirectory()
+ "/Demo.apk");
Uri mPackageURI = Uri.fromFile(file);
ApplicationManager appMgr = null;
try {
appMgr = new ApplicationManager(context);
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
int installFlags = 1;
PackageManager pm = context.getPackageManager();
Method method = null;
try {
method = pm.getClass().getMethod(
"installPackage",
new Class[] { android.net.Uri.class,
android.content.pm.IPackageInstallObserver.class,
Integer.TYPE, String.class });
} catch (SecurityException …Run Code Online (Sandbox Code Playgroud)