Hãy thử sử dụng như sau:
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Nếu một hành động mặc định đã được thiết lập (bạn), bạn có thể gọi đầu tiên:
getPackageManager().clearPackagePreferredActivities(getPackageName());
Nếu hành động mặc định không phải của mình, bạn không thể xóa nó theo chương trình, những gì bạn có thể làm là kiểm tra xem ứng dụng khác có được đặt làm mặc định hay không và hiển thị thông báo ..
private boolean isMyLauncherDefault() {
PackageManager localPackageManager = getPackageManager();
Intent intent = new Intent("android.intent.action.MAIN");
intent.addCategory("android.intent.category.HOME");
String str = localPackageManager.resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName;
return str.equals(getPackageName());
}
Là một workaround trong trường hợp ứng dụng khác được thiết lập như mặc định, bạn có thể tạo ra một ngôi nhà fake
, cài đặt nó (điều này sẽ forse hệ thống để xóa các ứng dụng mặc định) và sau đó gỡ bỏ nó ...
Manifest .xml
<activity
android:name="FakeHome" android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
FakeHome.java
public class FakeHome extends Activity {
}
Somewhere
if(!isMyLauncherDefault()) {
PackageManager p = getPackageManager();
ComponentName cN = new ComponentName(Activity.this, FakeHome.class);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent selector = new Intent(Intent.ACTION_MAIN);
selector.addCategory(Intent.CATEGORY_HOME);
startActivity(selector);
p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
Mã này sẽ không bật lên hộp thoại nếu trình khởi chạy mặc định đã được đặt. –
Bạn đã bao giờ làm việc này chưa? – portfoliobuilder
Tham số 'filters' của' getPreferredActivities() 'là tham số đầu ra. Thêm một mục bộ lọc vào danh sách trước khi cuộc gọi không có hiệu lực. –