バックグラウンドサービス(同じパッケージ)からアクティビティを開始する方法を見つけようとして、レベル10 API以下(2.3.3で試行)でスタックし、システムパーミッションであるパーミッションSTATUS_BARに対して文句を言い続けます。
いろいろな方法を試しましたが、うまくいきませんでした。
マニフェストのアクティビティ定義:
<activity
android:name="com.company.app.ui.ViewActivity"
android:label="@string/title_activity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:screenOrientation="portrait"
android:launchMode="singleInstance"
android:stateNotNeeded="true"
android:exported="true">
<intent-filter>
<action android:name="com.company.app.action.START_VIEW" />
<data android:scheme="package" android:pathPattern="com.company.app"/>
</intent-filter>
</activity>
コード:
Intent it = new Intent("com.company.app.action.START_VIEW");
it.setComponent(new ComponentName(getPackageName(), ViewActivity.class.getName()));
it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(it);
別:
Intent intent = new Intent(this, ViewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
両方とも例外を除いて失敗します:
03-16 14:10:07.583: E/MyApp(367): java.lang.SecurityException: Permission Denial: starting Intent { act=com.company.app.action.START_DDM flg=0x10000000 cmp=com.company.app/.ViewActivity } from ProcessRecord{43db3d88 367:com.company.app/10029} (pid=367, uid=10029) requires android.permission.STATUS_BAR
03-16 14:10:07.703: E/MyApp(367): android.os.Parcel.readException(Parcel.java:1218)
03-16 14:10:07.793: E/MyApp(367): android.os.Parcel.readException(Parcel.java:1206)
03-16 14:10:07.864: E/MyApp(367): android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214)
03-16 14:10:07.944: E/MyApp(367): android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
03-16 14:10:08.044: E/MyApp(367): android.app.ApplicationContext.startActivity(ApplicationContext.java:555)
03-16 14:10:08.174: E/MyApp(367): android.content.ContextWrapper.startActivity(ContextWrapper.java:248)
03-16 14:10:08.244: E/MyApp(367): com.company.app.service.MyService.showHideView(MyService.java:616)
03-16 14:10:08.324: E/MyApp(367): com.company.app.service.MyServiceThread$1.handleMessage(MyServiceThread.java:99)
03-16 14:10:08.394: E/MyApp(367): android.os.Handler.dispatchMessage(Handler.java:99)
03-16 14:10:08.473: E/MyApp(367): com.company.app.service.MyServiceThread.callShowHideView(MyServiceThread.java:231)
03-16 14:10:08.563: E/MyApp(367): com.company.app.service.MyServiceThread.run(MyServiceThread.java:205)
更新:以下に解決策を投稿しました...愚かなエラーメッセージをAndroidに感謝します!