Вызовите стороннее приложение Активность из собственного приложения
Я успешно вызвал сторонние приложения из своего приложения
Приложения, такие как: Google Drive и Google Photos
Код:
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 Вот код, которому я следовал, чтобы вызвать стороннее приложение Activity из собственного приложения
При нажатии кнопки вызывается Активность стороннего приложения (Like: 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);
}
});
}
1 ответ
Режим киоска официально называется блокировкой задач. Имя содержит подсказку. Вы можете запускать сторонние действия только в том случае, если их режим запуска позволяет им запускать одно и то же задание. Если они этого не делают, ваши варианты:
- отключить блокировку задач перед запуском сторонней активности
- ходатайство сопровождающего сторонней деятельности об изменении режима запуска
- найти альтернативную стороннюю деятельность