当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,
来源:互联网 发布:caffe latte 编辑:程序博客网 时间:2024/04/29 01:44
[QUESTION]
当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,有SD卡自动安装到SD卡中
[ANSWER]
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 0eb11cd..f10f14a 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -47,6 +47,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import android.widget.Toast;
/**
* This activity is displayed when the system attempts to start an Intent for
@@ -67,6 +68,16 @@ public class ResolverActivity extends AlertActivity implements
null, null, true);
}
+
+ private boolean existSDCard() {
+ if (android.os.Environment.getExternalStorageState().equals(
+ android.os.Environment.MEDIA_MOUNTED)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
protected void onCreate(Bundle savedInstanceState, Intent intent,
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption, boolean alwaysChoose) {
@@ -74,6 +85,16 @@ public class ResolverActivity extends AlertActivity implements
mPm = getPackageManager();
intent.setComponent(null);
+ try {
+ if (intent.getDataString().endsWith(".apk") && !existSDCard()) {
+ Toast.makeText(this, "Not exist SD Card.",Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+ } catch (Exception e) {
+ Log.w("ResolverActivity", "Exception:" + e.getMessage());
+ }
+
AlertController.AlertParams ap = mAlertParams;
ap.mTitle = title;
@@ -109,6 +130,7 @@ public class ResolverActivity extends AlertActivity implements
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption) {
onCreate(savedInstanceState, intent, title, initialIntents, rList, alwaysUseOption, false);
+
}
public void onClick(DialogInterface dialog, int which) {
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 90adbdc..43fca32 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -3387,6 +3387,11 @@ class PackageManagerService extends IPackageManager.Stub {
}
// Add the new setting to mSettings
mSettings.insertPackageSettingLP(pkgSetting, pkg);
+
+ if (!isSystemApp(pkg)) {
+ pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ }
+
// Add the new setting to mPackages
mPackages.put(pkg.applicationInfo.packageName, pkg);
// Make sure we don't accidentally delete its data.
@@ -4727,7 +4732,7 @@ class PackageManagerService extends IPackageManager.Stub {
IPackageInstallObserver observer, int flags,
String installerPackageName) {
this.packageURI = packageURI;
- this.flags = flags;
+ this.flags = flags|PackageManager.INSTALL_EXTERNAL; //flag
this.observer = observer;
this.installerPackageName = installerPackageName;
}
当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,有SD卡自动安装到SD卡中
[ANSWER]
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 0eb11cd..f10f14a 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -47,6 +47,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import android.widget.Toast;
/**
* This activity is displayed when the system attempts to start an Intent for
@@ -67,6 +68,16 @@ public class ResolverActivity extends AlertActivity implements
null, null, true);
}
+
+ private boolean existSDCard() {
+ if (android.os.Environment.getExternalStorageState().equals(
+ android.os.Environment.MEDIA_MOUNTED)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
protected void onCreate(Bundle savedInstanceState, Intent intent,
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption, boolean alwaysChoose) {
@@ -74,6 +85,16 @@ public class ResolverActivity extends AlertActivity implements
mPm = getPackageManager();
intent.setComponent(null);
+ try {
+ if (intent.getDataString().endsWith(".apk") && !existSDCard()) {
+ Toast.makeText(this, "Not exist SD Card.",Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+ } catch (Exception e) {
+ Log.w("ResolverActivity", "Exception:" + e.getMessage());
+ }
+
AlertController.AlertParams ap = mAlertParams;
ap.mTitle = title;
@@ -109,6 +130,7 @@ public class ResolverActivity extends AlertActivity implements
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption) {
onCreate(savedInstanceState, intent, title, initialIntents, rList, alwaysUseOption, false);
+
}
public void onClick(DialogInterface dialog, int which) {
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 90adbdc..43fca32 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -3387,6 +3387,11 @@ class PackageManagerService extends IPackageManager.Stub {
}
// Add the new setting to mSettings
mSettings.insertPackageSettingLP(pkgSetting, pkg);
+
+ if (!isSystemApp(pkg)) {
+ pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ }
+
// Add the new setting to mPackages
mPackages.put(pkg.applicationInfo.packageName, pkg);
// Make sure we don't accidentally delete its data.
@@ -4727,7 +4732,7 @@ class PackageManagerService extends IPackageManager.Stub {
IPackageInstallObserver observer, int flags,
String installerPackageName) {
this.packageURI = packageURI;
- this.flags = flags;
+ this.flags = flags|PackageManager.INSTALL_EXTERNAL; //flag
this.observer = observer;
this.installerPackageName = installerPackageName;
}
[QUESTION]
当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,有SD卡自动安装到SD卡中
[ANSWER]
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index 0eb11cd..f10f14a 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -47,6 +47,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import android.widget.Toast;
/**
* This activity is displayed when the system attempts to start an Intent for
@@ -67,6 +68,16 @@ public class ResolverActivity extends AlertActivity implements
null, null, true);
}
+
+ private boolean existSDCard() {
+ if (android.os.Environment.getExternalStorageState().equals(
+ android.os.Environment.MEDIA_MOUNTED)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
protected void onCreate(Bundle savedInstanceState, Intent intent,
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption, boolean alwaysChoose) {
@@ -74,6 +85,16 @@ public class ResolverActivity extends AlertActivity implements
mPm = getPackageManager();
intent.setComponent(null);
+ try {
+ if (intent.getDataString().endsWith(".apk") && !existSDCard()) {
+ Toast.makeText(this, "Not exist SD Card.",Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+ } catch (Exception e) {
+ Log.w("ResolverActivity", "Exception:" + e.getMessage());
+ }
+
AlertController.AlertParams ap = mAlertParams;
ap.mTitle = title;
@@ -109,6 +130,7 @@ public class ResolverActivity extends AlertActivity implements
CharSequence title, Intent[] initialIntents, List<ResolveInfo> rList,
boolean alwaysUseOption) {
onCreate(savedInstanceState, intent, title, initialIntents, rList, alwaysUseOption, false);
+
}
public void onClick(DialogInterface dialog, int which) {
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 90adbdc..43fca32 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -3387,6 +3387,11 @@ class PackageManagerService extends IPackageManager.Stub {
}
// Add the new setting to mSettings
mSettings.insertPackageSettingLP(pkgSetting, pkg);
+
+ if (!isSystemApp(pkg)) {
+ pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
+ }
+
// Add the new setting to mPackages
mPackages.put(pkg.applicationInfo.packageName, pkg);
// Make sure we don't accidentally delete its data.
@@ -4727,7 +4732,7 @@ class PackageManagerService extends IPackageManager.Stub {
IPackageInstallObserver observer, int flags,
String installerPackageName) {
this.packageURI = packageURI;
- this.flags = flags;
+ this.flags = flags|PackageManager.INSTALL_EXTERNAL; //flag
this.observer = observer;
this.installerPackageName = installerPackageName;
}
0 0
- 当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,
- 将apk安装到sd卡中
- 安装apk到SD卡失败
- 如何将APK安装到SD卡中
- 从SD卡安装apk
- Android_用adb命令安装apk到模拟器SD卡
- Android的.apk软件安装到sd卡的方法
- 新建线程下载apk到sd卡并且安装
- Android4.2 在工程版机器上插入SD卡后自动运行SD卡根目录中的AutoRun.sh以实现动态开机动画、安装SD卡中指定目录中的apk到系统中等
- 如何在开发时可以让Android应用程序支持安装到SD卡
- 如何在开发时可以让Android应用程序支持安装到SD卡
- 如何在开发时可以让Android应用程序支持安装到SD卡
- android 如何在手机第一次开机的时候,把用户放在外置SD卡上的APK自动安装到手机的存储卡。
- 如何在手机第一次开机的时候,把用户放在外置SD卡上的APK预置安装到手机的存储卡
- android 如何在手机第一次开机的时候,把用户放在外置SD卡上的APK自动安装到手机的存储卡。
- Android 程序默认安装到sd卡
- ubuntu安装到SD卡
- Android无SD卡如何从内存中安装apk?
- ios本地推送
- 什么是系统重构
- CFileDialog 打开目录文件 保存目录文件
- Oracle数据库链Database links
- 数据库中插入一条记录后获取主键id
- 当使用第三方程序安装APK时如何让APK只能安装到SD card,不允许安装到机器存储,并在没有SD卡时弹出警告:请插入SD卡,
- 创建上下文菜单
- OpenGL 函数介绍
- 用Python做单变量数据集的异常点分析
- android 软键盘弹出与收起
- 转:SQLServerDBA十大必备工具---让生活轻松点
- 电梯里的爱情&&华科oj
- hdu2089
- 使用Fragment实现类似Tab的需求