🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2829閲覧

android ランチャーから明示的intentによるアプリの起動

mochimama

総合スコア10

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2019/10/10 01:20

編集2019/10/13 16:46

android ランチャーアプリ制作 明示的intentによるアプリの起動

初めまして。android開発初心者です。未熟者ですがどうぞ宜しくお願い致します。

androidでランチャーアプリを制作しています。
ランチャーから他のアプリは正常起動できるのに、どうしても起動できないアプリが数個あります。
色々調べましたが、どうしても解決策が見つかりません。
皆様のお力をお借りできればと思います。宜しくお願い致します。

明示的intentを発行し、以下のエラーメッセージが発生しました。

エラーメッセージ

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.test.aqua.launcher.testapp/com.test.appwidget.AppWidgetConfigureActivity } from ProcessRecord{44e2bd 14072:com.example.myapp/u0a326} (pid=14072, uid=10326) not exported from uid 10254 android.os.Parcel.createException(Parcel.java:1969) android.os.Parcel.readException(Parcel.java:1935) android.os.Parcel.readException(Parcel.java:1885) android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:3755) android.app.Instrumentation.execStartActivity(Instrumentation.java:1671) android.app.Activity.startActivityForResult(Activity.java:4586) android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:767) android.app.Activity.startActivityForResult(Activity.java:4544) android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754) android.app.Activity.startActivity(Activity.java:4905) android.app.Activity.startActivity(Activity.java:4873) com.example.mysta.MyAdapter$ViewHolder.onClick(MyAdapter.java:144)

該当のソースコード

manifests

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.myapp"> 4 5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 6 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 7 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 8 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 9 <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" /> 10 <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" /> 11 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 12 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 13 14 <application 15 android:allowBackup="true" 16 android:icon="@mipmap/ic_launcher" 17 android:label="@string/app_name" 18 android:roundIcon="@mipmap/ic_launcher_round" 19 android:supportsRtl="true" 20 android:theme="@style/AppTheme"> 21 <activity 22 android:name=".MainActivity" 23 android:label="@string/app_name" 24 android:theme="@style/AppTheme.NoActionBar" 25 android:exported="true"> 26 <intent-filter> 27 <action android:name="android.intent.action.MAIN" /> 28 <category android:name="android.intent.category.LAUNCHER" /> 29 </intent-filter> 30 </activity> 31 32 <receiver android:name=".MyReceiver"> 33 <intent-filter> 34 <action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" /> 35 <action android:name="android.intent.action.PACKAGE_ADDED" /> 36 <action android:name="android.intent.action.PACKAGE_REMOVED" /> 37 <data android:scheme="package" /> 38 </intent-filter> 39 </receiver> 40 </application> 41 42</manifest> 43

MainActivity

java

1 2PackageManager pm = getPackageManager(); 3pm.getInstalledApplications(PackageManager.GET_META_DATA); 4 5Intent intent; 6 7intent = new Intent(String.valueOf(Intent.ACTION_MAIN), null); 8 9intent.addCategory(String.valueOf(Intent.CATEGORY_LAUNCHER)); 10 11final List<ResolveInfo> ResoInfoList = pm.queryIntentActivities(intent, 0); 12 13for (ResolveInfo app : ResoInfoList) { 14   final AppData data = new AppData(); 15   ApplicationInfo appInfo = app.activityInfo.applicationInfo; 16 data.label = app.loadLabel(pm).toString(); 17 Log.d(TAG, "label:" + data.label); 18 data.pname = String.valueOf(app.activityInfo.packageName); 19 Log.d(TAG, "pname:" + data.pname); 20 data.className = app.activityInfo.name; 21 Log.d(TAG, "className:" + data.className)22 23 }

Myadapter

java

1 2ComponentName name = new ComponentName(data.pname, data.className); 3Intent intent = new Intent(Intent.ACTION_MAIN); 4intent.addCategory(Intent.CATEGORY_LAUNCHER); 5intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 6   Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 7intent.setComponent(name); 8v.getContext().startActivity(intent);

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

intentを受け取る側のアプリのmanifestsにexported=trueが設定されていなかったのが起動できない原因だったようです。

コードを下記のように書き換え、ランチャー画面に起動不可能なアプリは表示しないようにしました。

MainActivity

java

1 2PackageManager pm = getPackageManager(); 3pm.getInstalledApplications(PackageManager.GET_META_DATA); 4 5Intent intent; 6 7intent = new Intent(String.valueOf(Intent.ACTION_MAIN), null); 8 9intent.addCategory(String.valueOf(Intent.CATEGORY_LAUNCHER)); 10 11final List<ResolveInfo> ResoInfoList = pm.queryIntentActivities(intent, 0); 12 13boolean exported_fg; 14 15for (ResolveInfo app : ResoInfoList) { 16 exported_fg = false; 17 exported_fg = app.activityInfo.exported; 18 if(exported_fg == true) { 19    final AppData data = new AppData(); 20    ApplicationInfo appInfo = app.activityInfo.applicationInfo; 21 data.label = app.loadLabel(pm).toString(); 22 Log.d(TAG, "label:" + data.label); 23 data.pname = String.valueOf(app.activityInfo.packageName); 24 Log.d(TAG, "pname:" + data.pname); 25 data.className = app.activityInfo.name; 26 Log.d(TAG, "className:" + data.className)27 } 28} 29

ありがとうございました。

投稿2019/10/13 17:04

mochimama

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問