2013-07-12 44 views
6

Tôi muốn khởi động ứng dụng của mình ngay sau khi khởi động điện thoại. Rõ ràng các ứng dụng được bắt đầu sau khi khởi động nhưng nó ngay lập tức treo (chỉ để được rõ ràng các ứng dụng bình thường hoạt động tốt). Tôi đã đọc và thử các giải pháp khác nhau (link1, link2) và thực sự cùng một mã hoạt động tốt với một ứng dụng khác mà tôi đang phát triển. Dưới đây là các mã:Bắt đầu hoạt động khi khởi động

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.bluetoothx10y" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="6" 
     android:targetSdkVersion="15" /> 

    <uses-feature android:name="android.hardware.usb.accessory"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.BLUETOOTH"/> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <receiver 
      android:name=".StartMyActivityAtBootReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 


     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

      <intent-filter> 
       <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/> 
      </intent-filter> 

      <meta-data 
       android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" 
       android:resource="@xml/accessory_filter"> 
      </meta-data> 

     </activity> 

     <activity android:name=".DeviceListActivity" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.Dialog" 
       android:screenOrientation="landscape" />   
    </application> 

</manifest> 

StartMyActivityAtBootReceiver.java:

public class StartMyActivityAtBootReceiver extends BroadcastReceiver {  
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {  

       Intent myStarterIntent = new Intent(context, MainActivity.class); 
       myStarterIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(myStarterIntent); 

      }  
    } 
} 

Nó có thể được liên quan đến thực tế là tôi đang sử dụng rất nhiều các điều khoản sử dụng?

+1

mô tả vấn đề của bạn là gì chính xác? – Tarun

+0

Ứng dụng chỉ đơn giản là treo sau khi khởi động ... chỉ để được rõ ràng các ứng dụng bình thường hoạt động tốt. – STiLLeN

+1

bạn có stacktrace không? – Tarun

Trả lời

1

tôi quản lý để giải quyết vấn đề. Bên trong OnCreate() Tôi đã có mã này (liên quan đến giao tiếp USB) đã gây ra sự cố:

act_string = getIntent().getAction(); 
    if(-1 != act_string.indexOf("android.intent.action.MAIN")){ 
     restorePreference(); 
    }   
    else if(-1 != act_string.indexOf("android.hardware.usb.action.USB_ACCESSORY_ATTACHED")){ 
     cleanPreference(); 
    } 

Xóa mã này đã giải quyết vấn đề khởi động sau khi khởi động.

3

làm điều đó như thế này trong điều kiện nếu

if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
1

ở vị trí của

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

add cũng này

<action android:name="android.intent.action.QUICKBOOT_POWERON" /> 

một số thiết bị như HTC không bắt BOOT_COMPLETED

+0

Điều này là cùng một mã tôi đăng trong câu hỏi của tôi hoạt động tốt trên cùng một thiết bị nhưng với một ứng dụng khác. Dù sao tôi đã cố gắng để thêm dòng, cùng một vấn đề – STiLLeN

16
Try this: 

1] Trong tập tin AndroidManifest.xml:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<application 
... 
    <receiver 
     android:name=".StartMyActivityAtBootReceiver" 
     android:enabled="true" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 
</application> 

2] Bên BroadcastReciever lớp với StartMyActivityAtBootReceiver như tên lớp.

@Override 
public void onReceive(Context context, Intent intent) { 

    Intent i = new Intent(context, MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(i); 

} 

Điều này làm việc cho tôi. Sự khác biệt về mã như sau:

  • android: permission = "android.permission.RECEIVE_BOOT_COMPLETED" bên trong bộ thu.
  • bao gồm "danh mục android: name =" android.intent.category.DEFAULT "" bên trong bộ lọc mục đích.
  • Tôi không kiểm tra mục đích trong onRecieve, như tôi biết mã đó sẽ được thực hiện chỉ khi nó đúng
+2

Tôi đã thử mã của bạn nhưng theo cách đó các ứng dụng thậm chí không bắt đầu sau khi khởi động (vì vậy nó không sụp đổ) – STiLLeN

+1

các ứng dụng thậm chí không bắt đầu? những gì chính xác xảy ra.? Mã hoạt động .. – SKK

+3

Nếu không có i.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK) Tôi không thể bắt đầu hoạt động của mình. Vì vậy, điều đó dường như là bắt buộc trong trường hợp này. Câu trả lời này rất tốt. –

4
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>  
<receiver android:name=".StartMyActivityAtBootReceiver" 
         android:enabled="true" 
         android:exported="true"> 
       <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED"/> 
        <action android:name="android.intent.action.QUICKBOOT_POWERON"/> 
       </intent-filter> 
      </receiver> 
0

Tôi muốn thêm toàn bộ tệp kê khai mà workv cho tôi trên oppo neo 5. Và, thậm chí chăm sóc một số điện thoại yêu cầu quyền truy cập đặc biệt để bắt đầu khởi động hoặc các quyền đặc biệt khác. Do đó, đừng quên cho phép truy cập vào ứng dụng của bạn !!.

Dưới đây là đoạn code -

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.javacodegeeks.androidserviceonbootexample" 
    android:installLocation="internalOnly"> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="SilversithService" 
     android:theme="@style/AppTheme"> 
     <receiver 
      android:name="com.javacodegeeks.androidserviceonbootexample.BroadcastReceiverOnBootComplete"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.REBOOT"/> 
       <category android:name="android.intent.category.HOME" /> 
      </intent-filter> 
     </receiver> 
     <service android:name="com.javacodegeeks.androidserviceonbootexample.AndroidServiceStartOnBoot" 
      android:enabled="true"></service> 
     <activity 
      android:name="com.javacodegeeks.androidserviceonbootexample.MainActivity" 
      android:label="SilversithService"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
Các vấn đề liên quan