簡體   English   中英

如何在接收時使用廣播接收器

[英]how to use broadcast receiver on receive

我有一個項目,當我運行該應用程序時,一個服務應處於活動狀態,當設備打開時,我的android服務應處於活動狀態。 該項目已成功在模擬器中運行,但是當我打開設備電源時卻無法在我的手機中運行!

我的廣播接收器:

 public class BroadcastReceiverOnTurnedOn extends BroadcastReceiver {
 @Override
  public void onReceive(Context context, Intent intent) {
      Intent startServiceIntent = new Intent(context, MyService.class);
      context.startService(startServiceIntent);
  }
 }

我補充說:

  <receiver android:name="com.dariran.BroadcastReceiverOnTurnedOn">  
    <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>  
  </receiver>

到Manifest.xml上的appliation標簽,並

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

您正在注冊的不是ServiceBroadcastReceiver 服務通常會一直在后台運行(如果內存和資源允許的話)。

僅當重新啟動設備后,廣播接收機才會激活-模擬器在每次啟動時都會“啟動”。 安裝該應用程序后,您的手機無法“啟動”。

您應該注冊“安裝了應用”之類的事件,或者實際實現服務,例如:

http://www.vogella.com/tutorials/AndroidServices/article.html

您需要確保將應用程序安裝到設備上后,應通過單擊應用程序圖標將其啟動一次,然后只有啟動接收器會在隨后的重新啟動調用中收到啟動事件。

我無法理解的是,如果我在內部存儲中成功安裝了應用程序,即使設備重新啟動也能正常工作,但是當我在外部存儲中安裝應用程序,然后重新啟動設備時,則無法正常工作

我有一個項目,當運行應用程序時,一項服務處於活動狀態,而當設備打開時,我的android服務處於活動狀態。 該項目成功地在設備的內部存儲器中運行,但是當我將其安裝在外部存儲器上並再次重新啟動設備時,它將無法正常工作!

首先,我以第一時間致電我的服務,它可以工作,但是當我重新啟動設備時,它不起作用!

我的活動:

public class FirstClass extends Activity 
{
  public void onCreate(Bundle savedInstanceState) 
  {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.first);
   final Handler handler = new Handler();
   handler.postDelayed(new Runnable() 
   {
     public void run()
    {
        startService(new Intent(getApplicationContext(), MyService.class));
        startActivity(new Intent(FirstClass.this, MainActivity.class));
        finish();
    }
 },5000);
}
 /////////////////////////////////////////////////
}

我的廣播接收器:

 public class BroadcastReceiverOnTurnedOn extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
    Intent startServiceIntent = new Intent(context, MyService.class);
    context.startService(startServiceIntent);
  }
 }

我補充說:

  <service
    android:name="com.dariran.MyService"
    android:enabled="true"
    android:exported="true" >
  </service>
  <receiver android:name="com.dariran.BroadcastReceiverOnTurnedOn"
    android:enabled="true">
    <intent-filter android:priority="1">
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter>
    <intent-filter>
        <action  android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
    </intent-filter>
 </receiver>to appliation tag on Manifest.xml and 

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

我將此代碼添加到我的服務類中,以放置一個過濾器以識別外部存儲,但是不再起作用:(

 @Override
 public void onStart(Intent intent, int startId) {
   try {

    IntentFilter filter = new IntentFilter(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
    filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
    BroadcastReceiver mReceiver = new BroadcastReceiverOnTurnedOn();
    registerReceiver(mReceiver, filter);

   } catch (Exception e) {
   }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM