7

tôi đặt hoạt động của tôi như một launcher mặc định để đánh chặn nhấp chuột nút home như vậy:Remove Hoạt động as Default Launcher

<activity 
    android:name=".ExampleActivity" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     <category android:name="android.intent.category.HOME" />   
     <category android:name="android.intent.category.DEFAULT" />    
    </intent-filter> 
</activity> 

Khi hoạt động của tôi, ExampleActivity được đưa ra, nếu tôi nhấp vào nhà chìa khóa, tôi nhận được được nhắc chọn. Nếu tôi chọn hãy đặt số này làm mặc định là và chọn hoạt động của mình, tôi bị kẹt Trong hoạt động của tôi như mong muốn.

Vấn đề là khi tôi rời khỏi hoạt động, tôi cố gắng xóa hoạt động của mình khỏi trình khởi chạy mặc định nhưng không thành công.

Tôi đã thử:

ComponentName componentName = new ComponentName( 
        "com.example.exampleactivity", 
        "com.example.exampleactivity.class"); 

pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP); 

Và:

PackageManager pm = getActivity().getPackageManager(); 
      ComponentName name = new ComponentName(this, "com.example.exampleactivity.class"); 
      pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0); 

Nhưng định của tôi cho nhà không bao giờ được gỡ bỏ.

Có ai có cách làm việc để khắc phục sự cố ở trên không?

Tôi chỉ không phải nút trang chủ là mặc định cho một hoạt động cụ thể, không phải toàn bộ ứng dụng của tôi. Khi tôi rời khỏi hoạt động, nó sẽ bị xóa và khôi phục về mặc định.

+0

Cập nhật: Vẫn đang tìm kiếm một câu trả lời cho việc này. –

+0

Xin chào Mike Mackintosh. Bạn đã nhận được giải pháp cho việc này chưa. Tôi bị mắc kẹt với cùng một vấn đề. – Kaifi

Trả lời

1

Bạn không thể ghi đè hành vi của khóa chính cho phù hợp với đơn đăng ký của mình; đây là quyết định thiết kế của Google, để đảm bảo người dùng luôn có thể quay lại vị trí tĩnh. Có thể có một số cách xung quanh điều này (nếu chúng vẫn tồn tại) nhưng chúng là những lỗi không mong muốn mà một ứng dụng không nên dựa vào.

Câu trả lời ngắn: bạn có thể có bất kỳ khóa nào ngoại trừ phím chủ.

+6

Sự cố không phải là cài đặt sử dụng phím chủ, nhưng trả lại mức sử dụng bình thường sau đó. Người dùng được nhắc sử dụng hoạt động làm ứng dụng trình khởi chạy mặc định. Điều này là do thiết kế và mong muốn. Tôi không muốn thay đổi điều này. Tôi muốn có thể xóa hoạt động của mình khỏi trình khởi chạy khi hoạt động được hoàn tất thay vào đó và trả lại trình khởi chạy về mặc định. Đây là nơi vấn đề nằm. –

+0

Đó không phải là vấn đề nằm ở đâu ...vấn đề là thiết kế của bạn không phải là thiết bị được Android cho phép. Các ứng dụng thông thường không có khả năng làm những gì bạn đang cố gắng làm vì trong khi bạn có thể có ý nghĩa tốt, nó làm cho nó trở nên quá dễ dàng cho một ứng dụng độc hại gây ra vấn đề cho người dùng. Bạn _might_ có thể làm việc xung quanh nó bằng cách vô hiệu hóa hoạt động tại nhà của bạn. Xem https://groups.google.com/forum/?fromgroups=#!topic/android-developers/dLEAFXONtIA để biết một cuộc thảo luận ngắn gọn về việc có ai đó muốn chính xác những gì bạn muốn và bật/tắt đã giúp anh ấy. – mah

+1

Nó hoàn toàn được cho phép nếu một trong những yêu cầu quyền chính xác. Bạn không nên làm điều đó cho trình phát video nhưng có lý do chính đáng để đăng ký làm ứng dụng nhà của người dùng. EG một ứng dụng khóa trẻ mới biết đi. – Bostwickenator

1

Hãy xem sự cho phép của android.permission.SET_PREFERRED_APPLICATIONS. Ngoài ra phương pháp này http://developer.android.com/reference/android/content/pm/PackageManager.html#clearPackagePreferredActivities(java.lang.String)

+0

Trước đây đã thử điều này, nhưng trong 4.x, điều này sẽ ném một lỗi quyền người dùng mà không có cách nào xung quanh nó. –

+0

Bạn chỉ có thể tự hủy cài đặt. Tôi không thấy bất kỳ lỗi nào cho nó. Bạn có chắc là bạn đang làm đúng không? – Bostwickenator

+0

Có lẽ là không. Tài liệu và mẫu mã rất thưa thớt. bạn có bất kì ví dụ nào không? –

13

nếu đó là ứng dụng của bạn mà bạn đang thanh toán bù trừ giá trị mặc định của nó, bạn chỉ có thể gọi:

getPackageManager().clearPackagePreferredActivities(getPackageName()); 

sau đó, để hiển thị hộp thoại của lựa chọn mà phóng để sử dụng, sử dụng:

final Intent intent=new Intent(); 
intent.setAction(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
startActivity(intent); 
+0

Hãy kết thúc thế giới cho câu hỏi này để được trả lời;) Cảm ơn, hãy thử! –

+0

Làm thế nào nó trở thành? – TacB0sS

+1

Nó chỉ ra rằng người hỏi đã không bận tâm để trở về câu hỏi này để xác nhận kết quả. – Arvin

2

giải pháp này là một cách thông minh để làm việc đó: Clearing and setting the default home application

các mã trong onResume() cơ bản đi như thế này:

ComponentName componentName = new ComponentName(MyActivity.this, FakeHome.class); 
    if (!isMyLauncherDefault()) { 
     Log.e(TAG, "MyActivity is not default home activity!"); 

     // toggle fake activity 
     PackageManager pm = getPackageManager(); 
     int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED 
       : PackageManager.COMPONENT_ENABLED_STATE_ENABLED); 
     pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP); 

     // start home activity to enable chooser 
     Intent selector = new Intent(Intent.ACTION_MAIN); 
     selector.addCategory(Intent.CATEGORY_HOME); 
     startActivity(selector); 
    } 

và phương pháp isMyLauncherDefault() được lấy từ đây: How to check if my application is the default launcher

Các vấn đề liên quan