Android 从自己的应用程序调用第三方应用程序活动

Android 从自己的应用程序调用第三方应用程序活动,android,android-5.0-lollipop,kiosk-mode,android-5.1.1-lollipop,Android,Android 5.0 Lollipop,Kiosk Mode,Android 5.1.1 Lollipop,我已成功从我的应用程序调用第三方应用程序 谷歌驱动和谷歌照片等应用 代码: 更新#1以下是我从自己的应用程序调用第三方应用程序的活动 点击第三方应用的呼叫活动按钮(如:Last FM) 但始终获取android.content.ActivityNotFoundException:无法找到显式活动类{fm.last.android/fm.last.android.LastFm};您是否在AndroidManifest.xml中声明了此活动?如果我使用try catch blog或If(intent

我已成功从我的应用程序调用第三方应用程序

谷歌驱动和谷歌照片等应用

代码:

更新#1以下是我从自己的应用程序调用第三方应用程序的活动

点击第三方应用的呼叫活动按钮(如:Last FM)

但始终获取
android.content.ActivityNotFoundException:无法找到显式活动类{fm.last.android/fm.last.android.LastFm};您是否在AndroidManifest.xml中声明了此活动?如果我使用try catch blog或If(intent.resolveActivity(getPackageManager())!=null){startActivity(intent);}
来避免ANF异常,那么它不会显示异常,但仍然无法调用活动

我已经在我的设备上安装了最后一个FM应用程序,那么原因是什么呢

更新#2:我创建了Hello World应用程序,并成功调用了该应用程序

屏幕截图

屏幕截图1
(刚刚启用信息亭模式)

屏幕截图2
(刚刚调用Hello World应用程序并按下后退退出Hello World)

问题:为什么会显示导航栏和底部栏(我指的是返回键、主页键和最近键)

这是我的
更新代码

  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);
            }
        });
    }

Kiosk模式正式称为任务锁定。这个名字包含了一个线索。只有在第三方活动允许将其启动到同一任务中时,才能启动第三方活动。如果没有,您可以选择:

  • 在启动第三方活动之前禁用任务锁定
  • 请求第三方活动的维护者更改其启动模式
  • 寻找替代的第三方活动

Kiosk word本身描述该设备仅运行单个应用程序。它可以防止其他人卸载自己。@ShreeKrishna首先是一个好名字,其次我刚刚安装了那个apk,但我的设备没有处于kiosk模式,所以我如何卸载那个apk…@Sonali如果没有处于kiosk模式,那么你可以很容易地卸载itI我尝试了很多次,但无法卸载那个apk,总是在对话框中显示取消为已启用,ok为已禁用@AmyGo to setting->app->kiosk app->force stop我明白你的意思,我可以调用app activity在我的app中运行它,所以我遵循以下步骤:所以发布以调用第三方app activity,但是获取:android.content.ActivityNotFoundException:无法找到显式活动类{fm.last.android/fm.last.android.LastFm};您是否在AndroidManifest.xml中声明了此活动?我是您链接到的答案的原始海报。你安装了LastFM吗?可能应用程序的程序包名称已更改?您是否检查了清单或最新的FM应用程序版本,以确保调用了正确的活动?如果它仍然是Github上的应用程序,那么它应该仍然有效。
final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");                
intentDeviceTest.setComponent(new ComponentName("fm.last.android","fm.last.android.LastFm"));
startActivity(intentDeviceTest);
  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);
            }
        });
    }