是否需要root设备才能在启动时启动应用程序?

时间:2015-10-09 08:59:26

标签: android

我已经开发了应用程序来启动应用程序,但它只在root设备上工作,如下所示。

AndroidManifest.xml文件中的权限和接收者如下所示。

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

<receiver android:enabled="true" android:name="in.com.appname.StartAppAtBootReceiver"
        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>
下面的

是在启动时接收的类。

public class StartAppAtBootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent myIntent = new Intent(context, MainActivity.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);
    }
}

我的问题是这段代码适用于非root设备吗? 如果是,那么缺少什么,因为相同的应用程序正在使用root设备。

2 个答案:

答案 0 :(得分:0)

这必须在没有root的情况下工作。 否则尝试使用简单的教程,如:Android AutoStart App after boot

的差异:

  • 检查发生了哪个动作。
  • 使用startService而不是startActivity

另一个提示:在清单顶部设置权限,在应用程序部分设置接收者。

答案 1 :(得分:0)

这应该没有root。

有几点需要注意:

  1. app必须至少启动一次才能收到BOOT_COMPLETED
  2. 如果应用已强制关闭,则在下次发布之前,它将失去接收BOOT_COMPLETED的能力。
  3. 此外,权限应该在清单的根目录而不是应用程序内部:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.x.y" >
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
        <application
            android:allowBackup="true"
    .
    .
    .
    

    确保您没有在上述情况下跑步。