我正在尝试编写一个在手机启动时运行的服务,并且必须从SD卡读取数据。起初我使用android.intent.action.BOOT_COMPLETED
的接收器,但切换到下面的意图,以确保已加载SD卡。
我的问题是,在我的Nexus 7上,它似乎没有收到MEDIA_MOUNTED
意图。 Nexus 7没有SD卡(但它有单独的SD卡分区)。我也尝试了BOOT_COMPLETED
意图,同样的运气。我已经在模拟器和我的Thunderbolt上测试了相同的代码,并且两种意图都有效。
Manifiest:
<receiver
android:name=".StartupReceiver"
android:enabled="true"
android:exported="true"
android:label="Start the NFS Automounter Service">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
<data android:scheme="file"/>
<!-- <action android:name="android.intent.action.BOOT_COMPLETED"></action>-->
</intent-filter>
</receiver>
BroadcastReceiver
类:
public class StartupReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()))
//if ("android.intent.action.MEDIA_MOUNTED".equals(intent.getAction()))
//{
Log.d("NFS_Automounter", "Recieved Mount");
Intent serviceIntent = new Intent("com.ancantus.nfsautomounter.AutomountService");
context.startService(serviceIntent);
//}
}
}
我注释了意图匹配只是为了尝试并记录该类是否完全执行。
我唯一的预感是Nexus 7没有广播MEDIA_MOUNTED
,因为它没有真正的SD卡;但我也无法收到BOOT_COMPLETED
的意图。
并提出问题;是的,我确实拥有BOOT_COMPLETED
权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
答案 0 :(得分:5)
在开始提供人们会找到的足够搜索结果之前,我必须输入多少次这个答案?也许粗体大写将起作用:
启动ANDROID 3.1,否BroadcastReceiver
将完全正常工作,直到有些人正在运行其中一个应用程序的其他组件,如用户运行活动。
这位于documentation(虽然位置不佳),位于blog posts,以及许多StackOverflow答案中,例如:
因此,请在您的应用中添加一项活动。无论如何,您需要进行一些活动,以控制您的后台操作,文档,许可协议,隐私政策等设置。
(请注意:我并不是真的大吼大叫 - 我很沮丧,尽管努力宣传,但这种情况仍在继续......)
答案 1 :(得分:1)
请注意,许多Android设备模拟 SD卡的方式不会影响SD卡的访问,即使桌面访问它也是如此。因此,Nexus 7可能只是以这种方式暴露所有内存,因为它没有真正安装任何东西,它不会广播MEDIA_MOUNTED
。如果你想在启动时做一些任务,那么听BOOT_COMPLETED
是唯一正确的方法。