2013-07-12 210 views
6

我想在手机启动后启动我的应用程序。显然,该应用程序是在启动后启动的,但它立即崩溃(只是为了清楚该应用程序通常工作正常)。我已经阅读并尝试了不同的解决方案(link1,link2),实际上相同的代码可以很好地与我正在开发的另一个应用程序一起工作。下面的代码:启动时启动活动

的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); 

      }  
    } 
} 

难道是相关的,我使用了大量的用户权限的事实呢?

+1

什么是你的问题描述是什么呢? – Tarun

+0

该应用程序在启动后崩溃...只是要清除该应用程序通常正常工作。 – STiLLeN

+1

你有堆栈跟踪吗? – Tarun

回答

1

我设法解决这个问题的代码会被执行。在里面的OnCreate()我有这个代码(与USB通信),这是导致飞机失事的原因:

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(); 
    } 

删除这段代码解决了问题,开机后启动。

3

像这样做的,如果条件

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

代替

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

插件也是这个

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

像HTC一些设备不抓BOOT_COMPLETED

+0

问题是,我发布在我的问题相同的代码在同一设备上工作正常,但与另一个应用程序。无论如何,我试图添加行,同样的问题 – STiLLeN

16
Try this: 

1]在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] StartMyActivityAtBootReceiver内部BroadcastReciever类作为类名。

@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); 

} 

这为我工作。代码的区别如下:

  • android:permission =“android.permission.RECEIVE_BOOT_COMPLETED”在接收器内部。
  • 包含“category android:name =”android.intent.category.DEFAULT“”in intent filter。
  • 我不检查onRecieve的意图,我只知道如果真
+2

我试过你的代码,但在这种方式应用程序甚至没有启动后启动(所以它不会崩溃) – STiLLeN

+1

该应用程序甚至没有启动?究竟发生了什么?代码工作.. – SKK

+3

没有i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)我无法开始我的活动。所以在这种情况下似乎是强制性的。这个答案非常好。 –

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

我想添加在oppo neo 5上工作的整个清单文件。 而且,即使照顾一些手机需要特殊访问来实现启动启动或其他特殊权限。所以,不要忘了允许访问您的应用程序!!

下面的代码 -

<?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>