2014-09-19 7 views
-1

태블릿을 부팅 할 때 내 응용 프로그램이 브라우저를 시작하지만 부팅시 충돌이 발생합니다. 누군가 내 실수를 알려주시겠습니까? 나는 내 activity_main.xmle에 아무것도 쓰지 않는다. 그것은 나에게 메시지 "불행히도 응용 프로그램이 추락했다"를 보여줍니다.BootReceiver를 사용할 때 응용 프로그램 충돌이 발생합니다.

mainfest

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

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" />  
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" />  
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity>  
     <receiver android:name=".BootReciever" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver>    
    </application>   
</manifest> 

추측에서 mainActivitc 클래스

package com.example.autostartmyapp;  

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 

public class MainActivity extends Activity {  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com/")); 
     startActivity(browserIntent); 
    } 

    public class BootReciever extends BroadcastReceiver 
    {  
     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      Intent myIntent = new Intent(context, MainActivity.class); 
      myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(myIntent); 
     } 

    }  
} 
+0

및 귀하의 logcat은 무엇입니까? –

답변

1

별도의 두 클래스 및 해결 mainfest 같은

MainActivity { 
...} 

BootReceiver 클래스

package com.example.BootReciever; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
public class BootReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context ctx, Intent arg1) { 

      Intent iMainActivity = new Intent(ctx, yourMainActivityClass); 
      iMainStartActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      ctx.startActivity(iMainActivity); 
    } 

}

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

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" />  
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" />  
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity>  
     <receiver 
     android:name="com.example.autostartmyapp.BootReciever" 
     android:enabled="true"   > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver>    
    </application>   
</manifest> 

아래
0

, 나는 매니페스트 지정이 .BootReceiver 수신기로, 그러나 당신의 코드를 기반으로하기 때문에 아마 말하고 싶지만 BootReceiver 클래스는 MainActivity 안에 중첩되어 있습니다. 따라서 BootReceiver를 최상위 클래스로 이동하거나 매니페스트를 변경하여 .MainActivity.BootReceiver를 수신자로 지정해야합니다.

그래도 문제가 해결되지 않으면 logcat을 게시하여 어떤 오류로 인해 충돌이 발생하는지 확인할 수 있습니다. 수신기 섹션으로 매니페스트에

+0

이 작동하지 않으며 logcat에 오류가 없습니다. 정상적으로 정상적으로 실행되지만 태블릿을 부팅 할 때 문제가 발생합니다. – logcat

0

사용이 :

<receiver 
     android:name=".BootReciever" 
     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> 

그리고 방송 수신기 클래스를 돌봐 내부되지해야합니다 :

package com.example.BootReciever; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class BootReciever extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context ctx, Intent arg1) { 

      Intent iMainActivity = new Intent(ctx, MainActivity.class); 
      iMainStartActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      ctx.startActivity(iMainActivity); 
    } 



} 
+0

미안합니다. 작동하지 않습니다. – logcat

+0

MainActivity가 시작되지 않는다는 것을 의미합니까? 내가 보여준 것처럼 BootReciever를 새로운 클래스로 옮겼습니까? –

+0

네, 당신이 제안한대로 해냈습니다. 코드는 다음과 같습니다. 코드를 복사하여 테스트 해주십시오. 활동이 시작되지 않습니다. http://hastebin.com/fedebesesu.xml – logcat

-1

앱이 너무 빨리 시작하지 않습니다 다른 중요한 앱을 먼저 시작해야합니다. 앱을 시작하기 위해 지연을 추가해야한다고 생각합니다. 이 같은 :

public class BootUpReceiver extends BroadcastReceiver { 

@Override 

public void onReceive(final Context context, Intent intent) { 

    // We can't wait on the main thread as it would be blocked if we wait for too long 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      try { 
       // Lets wait some time before starting the service to be fair to other processes on startup 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
      } 

      Intent myIntent = new Intent(context, MainActivity.class); 
      myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(myIntent); 
     } 
    }).start(); 
} 
+0

그것의 작동하지 않습니다 – logcat

+0

당신의'BootReciever'를 새로운 클래스로 옮겨서 이것을'manifast'에 추가하십시오 :'' –

+0

예, 당신이 제안한대로했는데 ... 여기 코드가 있습니다. 복사하여 자기 테스트를 해 주시겠습니까? 활동이 시작되지 않습니다. http://hastebin.com/fedebesesu.xml – logcat

관련 문제