Я успешно вызывал сторонние приложения из своего приложения
Такие приложения, как: Google Диск и Google Фото
Код:
btnL1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openApp(KioskActivity.this, "com.google.android.apps.docs");
}
});
btnL2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openApp(KioskActivity.this, "com.google.android.apps.photos");
}
});
public static boolean openApp(Context context, String packageName) {
PackageManager manager = context.getPackageManager();
try {
Intent i = manager.getLaunchIntentForPackage(packageName);
if (i == null) {
return false;
//throw new PackageManager.NameNotFoundException();
}
i.addCategory(Intent.CATEGORY_LAUNCHER);
context.startActivity(i);
return true;
} catch (Exception e) {
return false;
}
}
ОБНОВЛЕНИЕ № 1 Вот код, который я использовал для вызова активности стороннего приложения из собственного приложения.
При нажатии кнопки вызывается активность стороннего приложения (например, Last FM)
final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");
intentDeviceTest.setComponent(new ComponentName("fm.last.android","fm.last.android.LastFm"));
startActivity(intentDeviceTest);
Но всегда получаю android.content.ActivityNotFoundException: Unable to find explicit activity class {fm.last.android/fm.last.android.LastFm}; have you declared this activity in your AndroidManifest.xml? And If I use try-catch blog or if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); }
, чтобы избежать исключения ANF, тогда оно не показывает исключение, но все еще не может вызвать действие
Я уже установил приложение Last FM на свое устройство, в чем может быть причина?
ОБНОВЛЕНИЕ # 2: я создал приложение Hello World и успешно его вызвал
Скриншоты
Screenshot 1
(только что включил режим киоска)
Screenshot 2
(только что вызвал приложение Hello World и нажал, чтобы выйти из Hello World)
Вопрос: почему отображается панель навигации и нижняя панель (я имею в виду клавиши «Назад», «Домой» и «Недавние»)
Вот мой updated code
:
public class KioskActivity extends Activity {
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().getDecorView().setSystemUiVisibility(flags);
getActionBar().hide();
setContentView(wenchao.kiosk.R.layout.activity_lock_activity);
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mDPM = new ComponentName(this, MyAdmin.class);
if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
String[] packages = {this.getPackageName()};
startLockTask();
} else {
Toast.makeText(getApplicationContext(),"Not owner", Toast.LENGTH_LONG).show();
}
setVolumMax();
Button lock_btn = (Button)findViewById(wenchao.kiosk.R.id.lock_button);
Button unlock_btn = (Button)findViewById(wenchao.kiosk.R.id.unlock_button);
Button appButton = (Button) findViewById(R.id.appButton);
lock_btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
startLockTask();
return false;
}
});
unlock_btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
stopLockTask();
return false;
}
});
appButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");
intentDeviceTest.setComponent(new ComponentName("com.example.hello1","com.example.hello1.MainActivity"));
startActivity(intentDeviceTest);
}
});
}