Android 6.0 Marshmallow - 服务未启动API 23测试,在API 21上运行良好

时间:2016-01-29 22:16:48

标签: java android

我有以下测试服务。它在API 21上运行良好,但在API 23上,服务无法启动。

我已经浏览了API更改文档,但看不到注册更改等内容。

这个确切的代码正在使用API​​ 21.我缺少什么?

清单段:

<service
    android:name="com.mytest.service.TestService"
    android:label="@string/app_name"
    android:permission="android.permission.SYSTEM_ALERT_WINDOW" />

MainActivity细分:

this.startService(new Intent(this, TestService.class));

服务:

public class TestService extends Service
{
    @Nullable
    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Log.d("OOP", "onstartTest");
        return super.onStartCommand(intent, flags, startId);
    }
}

2 个答案:

答案 0 :(得分:3)

删除android:permission="android.permission.SYSTEM_ALERT_WINDOW"。您不需要它,因为您的服务未导出,因此无论如何,任何第三方应用都无法与该服务通信。

我的猜测是你的应用没有获得该权限,因为用户没有手动进入并允许你的应用在其他应用上绘制(通过设置)。

答案 1 :(得分:0)

也许您需要为测试明确声明一个权限,这是一个从Marshmallow测试中声明Coarse Location Permission的示例:

private void requestUserPermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) {
        displayCoarseLocationPermissionExplanation();
    } else {
        ActivityCompat.requestPermissions(MyActivityNameWherePermissionIsNeeded.this,
                                          new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                                          PERMISSION_REQUEST_COARSE_LOCATION);
    }
}