2011-02-01 41 views
1

SDカードに保存されたapkファイルをインストールする際に次のようなコードを実行しようとしています: "android.content.ActivityNotFoundException:明示的なアクティビティクラス{com.android.packageinstaller/.PackageInstallerActivity} "コードでは、fileがapkファイルのSDカードパスを表しています。apk programitacallyのインストール中にエラーが発生しました

Intent resultIntent = new Intent(android.content.Intent.ACTION_VIEW); 
resultIntent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive"); 
resultIntent.setClassName("com.android.packageinstaller", ".PackageInstallerActivity"); 
startActivity(resultIntent); 

これを管理する方法を教えてください。

おかげ ジェイブド・カーン

+0

'file'は有効ですか? – dbm

答えて

4

あなたはPackageInstallerを使用してパッケージをインストールし、削除する方法にthis blog postを読むことをお勧めします。

パッケージインストーラがMIMEタイプapplication/vnd.android.package-archiveを処理するように登録されているため、インテントクラス名を明示的に指定する必要はありません。インテントリゾルバは、適切なものを見つけるはずです。

また、ユーザーがINSTALL_NON_MARKET_APPSを有効にした場合にのみ操作が成功します。これはあなたが見ている失敗に直接関係していますが、そのことにも気づくはずです。

Intent resultIntent = new Intent(); 
resultIntent.setAction(Intent.ACTION_VIEW); 
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
resultIntent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive"); 

をそして

startActivity(resultIntent); 

注呼び出す:

0

はそうのようなIntent.FLAG_ACTIVITY_NEW_TASKを追加してみてください!先にFranci Penovが述べたようにINSTALL_NON_MARKET_APPSに関する条件が有効である必要があります。

+0

私の古いコードを簡単に書き直した後、私は空のコンストラクタでIntentを作成し、後でActionを手動で設定することに気付きました。これは私の変更された答えに反映されました。しかし、もしこれが何らかの違いがあれば私は知らない。私は再び自分のコードを試して、それは動作します。私は、私の解決策を働かせるための「特別な状況」があるのか​​、あなたの勇敢な試みが失敗するのか分かりません。 – dbm

+0

DBMこんにちは、 私はsimmilerの問題に直面し、あなたのソリューションを試してみたが、それでもこのエラー「android.content.ActivityNotFoundExceptionを取得しています:{com.android.packageinstaller/.PackageInstallerActivity}明示的なアクティビティクラスを見つけることができません。あなたを持っていますあなたのAndroidManifest.xmlでこのアクティビティを宣言しましたか? " マニフェストファイルにはどのような権限が必要ですか? ありがとうございました –

+0

私の上記の例のアクティビティ部分に注目していただきありがとうございます!私はAndroidManifest.xmlファイルでそのようなアクティビティがないので、アクティビティを定義していません。また、元の答えに間違って書いたように、私は 'setClassName'関数をIntentにコールしていません。 'resultIntent.setClassName(...)'行を削除しようとしたらうまくいけばそれはうまくいくでしょう:-) – dbm

関連する問題