[英]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" />
您正在注冊的不是Service
的BroadcastReceiver
。 服務通常會一直在后台運行(如果內存和資源允許的話)。
僅當重新啟動設備后,廣播接收機才會激活-模擬器在每次啟動時都會“啟動”。 安裝該應用程序后,您的手機無法“啟動”。
您應該注冊“安裝了應用”之類的事件,或者實際實現服務,例如:
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.