2011-12-13 44 views
24

Tôi là một ứng dụng nhằm mục đích chạy chỉ như một dịch vụ (không có giao diện, chỉ chạy trong nền). Tôi không có hoạt động nào được đề cập trong tệp AndroidManifest.xml của tôi nhưng hãy đặt người nhận để bắt đầu ứng dụng khi bắt đầu điện thoại.Khởi động ứng dụng android mà không cần hoạt động

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service 
     android:enabled="true" 
     android:name=".MyAppService"> 
     <intent-filter> 
      <action 
       android:name = "me.myapp.MyAppService"> 
      </action> 
     </intent-filter> 
    </service> 
    <receiver 
     android:enabled="true" 
     android:name=".BootReceiver"> 
     <intent-filter> 
      <action android:name = "android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
</application> 

Vấn đề là khi tôi đang phát triển (sử dụng Eclipse) ứng dụng, tôi cần kiểm tra các thay đổi của mình thường xuyên. Khi tôi chạy các ứng dụng (với điện thoại của tôi kết nối trong chế độ gỡ lỗi), tôi đã có một thông báo như

[2011-12-14 00:18:40 - MyApp] Android Launch! 
[2011-12-14 00:18:40 - MyApp] adb is running normally. 
[2011-12-14 00:18:40 - MyApp] No Launcher activity found! 
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device! 
[2011-12-14 00:18:40 - MyApp] Performing sync 

Làm thế nào tôi có thể khởi động ứng dụng lúc chạy, mà không cần phải khởi động lại nó mỗi lần?


Sửa này là không thể nữa dành cho Android 3.1 hoặc cao hơn. Source

Trả lời

33

Ngoài hai tùy chọn được đề cập bởi EboMike: Bạn luôn có thể gửi phát sóng BOOT_COMPLETED qua dòng lệnh thay vì khởi động lại điện thoại của bạn.

Sử dụng

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 

này sẽ dẫn đến một tình huống như sau một khởi động lại thực tế, và cũng sẽ kích hoạt bất kỳ thu khởi động ứng dụng của bên thứ 3. Sau khi gõ nó một lần trong một thiết bị đầu cuối bạn thường có thể lặp lại nó chỉ đơn giản bằng cách nhấn phím mũi tên lên theo sau là trở về trên hầu hết các hệ điều hành. Hoặc bạn có thể đưa nó vào một tập lệnh được kích hoạt sau khi cài đặt lại ứng dụng của bạn.


Nếu bạn muốn giới hạn phát sóng để chỉ ứng dụng của bạn, bạn cũng có thể chỉ định một thành phần:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName 

này gửi khi khởi động lại chỉ phát sóng để nhận của bạn. Tất cả các ứng dụng khác không được gọi.

+0

Cảm ơn, bạn nên đi. Có lẽ tôi cũng có thể tạo sự kiện của riêng mình mà chỉ ứng dụng của tôi có thể bắt kịp để tránh xung đột với các ứng dụng của bên thứ ba khác. –

+1

@MartinTrigaux Chỉ cần kiểm tra các tài liệu và nhớ rằng có thể chỉ định một thành phần để đạt được điều đó. Xem chỉnh sửa của tôi. –

2

Tùy chọn 1: Thêm hoạt động giả sẽ bắt đầu dịch vụ của bạn. Loại bỏ nó trước khi vận chuyển.

Tùy chọn 2: Tạo ứng dụng thử nghiệm thứ hai bắt đầu dịch vụ của bạn.

+0

Dễ dàng và làm việc, nhờ –

+0

ứng dụng sẽ cư xử như thế nào trong thời gian chạy? Điều gì sẽ làm cho ứng dụng chạy? Chạy sau khi khởi động không đủ tốt, vì Android có thể giết quá trình. Điều gì sẽ bắt đầu lại nó? –

1

Bắt đầu Các dịch vụ sử dụng Broadcast receiver thông qua bất kỳ ý định như

android.intent.action.BOOT_COMPLETED

không thể trên Android 3.1 cho đến khi người dùng sử dụng ứng dụng của bạn, và do đó để sử dụng ứng dụng của bạn phải có một đĩa đơn hoạt động không giao diện người dùng (có thể gọi kết thúc bằng oncreate()).

See the proof here

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