ApiDemos学习知识点Content-InstallApk(6)

xiaoxiao2021-02-28  115

Content-InstallApk

本Activity主要演示如何使用INSTALL_PACKAGE来安装应用程序

下面看一下布局和代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:paddingBottom="4dip" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Demonstrates using the INSTALL_PACKAGE Intent to install an application."/> <Button android:id="@+id/unknown_source" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Unknown Source"> </Button> <Button android:id="@+id/my_source" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="My Source"> </Button> <Button android:id="@+id/replace" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Replace"> </Button> <Button android:id="@+id/uninstall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Uninstall"> </Button> <Button android:id="@+id/uninstall_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Uninstall w/Result"> </Button> </LinearLayout>

public class InstallApk extends Activity { static final int REQUEST_INSTALL = 1; static final int REQUEST_UNINSTALL = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.install_apk); // Watch for button clicks. Button button = (Button)findViewById(R.id.unknown_source); button.setOnClickListener(mUnknownSourceListener); button = (Button)findViewById(R.id.my_source); button.setOnClickListener(mMySourceListener); button = (Button)findViewById(R.id.replace); button.setOnClickListener(mReplaceListener); button = (Button)findViewById(R.id.uninstall); button.setOnClickListener(mUninstallListener); button = (Button)findViewById(R.id.uninstall_result); button.setOnClickListener(mUninstallResultListener); } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_INSTALL) { if (resultCode == Activity.RESULT_OK) { Toast.makeText(this, "Install succeeded!", Toast.LENGTH_SHORT).show(); } else if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(this, "Install canceled!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Install Failed!", Toast.LENGTH_SHORT).show(); } } else if (requestCode == REQUEST_UNINSTALL) { if (resultCode == Activity.RESULT_OK) { Toast.makeText(this, "Uninstall succeeded!", Toast.LENGTH_SHORT).show(); } else if (resultCode == Activity.RESULT_CANCELED) { Toast.makeText(this, "Uninstall canceled!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Uninstall Failed!", Toast.LENGTH_SHORT).show(); } } } private OnClickListener mUnknownSourceListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk"))); startActivity(intent); } }; private OnClickListener mMySourceListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk"))); intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, getApplicationInfo().packageName); startActivityForResult(intent, REQUEST_INSTALL); } }; private OnClickListener mReplaceListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); intent.setData(Uri.fromFile(prepareApk("HelloActivity.apk"))); intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true); intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); intent.putExtra(Intent.EXTRA_ALLOW_REPLACE, true); intent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, getApplicationInfo().packageName); startActivityForResult(intent, REQUEST_INSTALL); } }; private OnClickListener mUninstallListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE); intent.setData(Uri.parse( "package:com.example.android.helloactivity")); startActivity(intent); } }; private OnClickListener mUninstallResultListener = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE); intent.setData(Uri.parse( "package:com.example.android.helloactivity")); intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); startActivityForResult(intent, REQUEST_UNINSTALL); } }; private File prepareApk(String assetName) { // Copy the given asset out into a file so that it can be installed. // Returns the path to the file. byte[] buffer = new byte[8192]; InputStream is = null; FileOutputStream fout = null; try { is = getAssets().open(assetName); fout = openFileOutput("tmp.apk", Context.MODE_WORLD_READABLE); int n; while ((n=is.read(buffer)) >= 0) { fout.write(buffer, 0, n); } } catch (IOException e) { Log.i("InstallApk", "Failed transferring", e); } finally { try { if (is != null) { is.close(); } } catch (IOException e) { } try { if (fout != null) { fout.close(); } } catch (IOException e) { } } return getFileStreamPath("tmp.apk"); } }

转载请注明原文地址: https://www.6miu.com/read-35631.html

最新回复(0)