爲了您的幫助,始終閱讀所有答案,我經常使用堆棧溢出,它總是有用的,如果有人能幫助我,我現在沒有找到對我的問題的幫助。很棒。在Java中使用編程方式更新版本
我做了一個簡單的程序來自動更新我的應用程序。所以下載工作很好,並將apk加入應用程序給我一個致命的錯誤。
通過調試誤差在
startActivity(intent);
的代碼是:
package com.example.updateversion;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
// ***************************
// if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
// }
java.text.DateFormat dateFormat = android.text.format.DateFormat
.getDateFormat(getApplicationContext());
// ***************************
String apkurl = "http://192.168.1.1/ANDROID/helloVersion.zip";// "http://www.vogella.com";
try {
URL url = new URL(apkurl);
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();
String PATH = Environment.getExternalStorageDirectory()
+ "/download/";
try {
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, "helloVersion.apk");
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = new BufferedInputStream(
urlConnection.getInputStream());
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
} finally {
try {
urlConnection.disconnect();
} catch (Exception e) {
}
}
File apkFile = new File(PATH + "helloVersion.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile),
"application/com.example.helloversion");
startActivity(intent); // here is the problem
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
}
我的錯誤是:
03-19 08:58:29.792: D/AndroidRuntime(28060): Shutting down VM
03-19 08:58:29.792: W/dalvikvm(28060): threadid=1: thread exiting with uncaught exception (group=0x40a591f8)
03-19 08:58:29.822: E/AndroidRuntime(28060): FATAL EXCEPTION: main
03-19 08:58:29.822: E/AndroidRuntime(28060): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///mnt/sdcard/download/helloVersion.apk typ=application/com.example.helloversion }
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1512)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.Activity.startActivityForResult(Activity.java:3190)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.Activity.startActivity(Activity.java:3297)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.example.updateversion.MainActivity.onCreateOptionsMenu(MainActivity.java:87)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.Activity.onCreatePanelMenu(Activity.java:2444)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:392)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:743)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2859)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.os.Handler.handleCallback(Handler.java:605)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.os.Handler.dispatchMessage(Handler.java:92)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.os.Looper.loop(Looper.java:137)
03-19 08:58:29.822: E/AndroidRuntime(28060): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-19 08:58:29.822: E/AndroidRuntime(28060): at java.lang.reflect.Method.invokeNative(Native Method)
03-19 08:58:29.822: E/AndroidRuntime(28060): at java.lang.reflect.Method.invoke(Method.java:511)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-19 08:58:29.822: E/AndroidRuntime(28060): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-19 08:58:29.822: E/AndroidRuntime(28060): at dalvik.system.NativeStart.main(Native Method)
我的權限是:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
你使用模擬器執行?因爲未列出用於AVD的Google API會導致此錯誤。 – 2013-03-19 07:46:59
它只是一個小測試 – 2013-03-19 13:39:12