[英]How can i disable any android app such that it cannot be opened until i change/press some button in app?
我正在嘗試構建一個家長控制應用程序。 所以現在我想禁用或鎖定應用程序(如 Whatsapp、Facebook 等)。 我曾嘗試使用PackageManager.setComponentEnabledSetting()
。 但它拋出java.lang.SercurityException
。
那么我怎樣才能制作一個家長控制應用程序,這樣我就可以在沒有 root 的情況下禁用我想要的任何應用程序。
我的代碼是
pm.setComponentEnabledSetting(new ComponentName(temp.activityInfo.packageName,
temp.activityInfo.name+".class"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
我的錯誤是這個
java.lang.SecurityException:權限拒絕:嘗試從 pid=11537、uid=10067、包 uid=10029 更改組件狀態
您必須添加以下權限才能清單。
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
但是,這些權限是針對系統應用的,您不能使用。 :(
您不能編寫應用程序來鎖定或關閉另一個應用程序。這是 Google 的一項政策。 要鎖定應用程序,您必須反復檢查正在運行的應用程序,如果特定應用程序處於打開狀態,則在其上顯示活動。
while(!Thread.currentThread().isInterrupted())
{
String topActivity = getFrontApp();
if(topActivity.isEmpty())
{
threadSleep(500);
continue;
}
if(topActivity.equals("lockApp"))
{
showLockActivity();
}
threadSleep(500);
}
// for Api21+ need permission
public static String getFrontApp()
{
if (Build.VERSION.SDK_INT >= 21)
{
UsageStatsManager usageManager = SystemMaster.getUsageStatsManager();
long now = System.currentTimeMillis();
List<UsageStats> localList = usageManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, now - 900_000L, now);
String str = "";
if (localList != null)
{
SortedMap<Long,UsageStats> mySortedMap = new TreeMap<>();
for(UsageStats usageStats : localList)
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
if(!mySortedMap.isEmpty())
str = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
return str;
}
else
{
ActivityManager am = (ActivityManager) getApplication().getSystemService(Context.ACTIVITY_SERVICE);
return am.getRunningTasks(1).get(0).topActivity.getPackageName();
}
上面的代碼很簡單,真正的app一定要多寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.