Eigene App als Standardanwendung definierbar machen

S

Ste-we

Neues Mitglied
0
Hallo,
ich bin gerade dabei meine erste App zu programmieren,habe aber auch sonst eher wenig Erfahrung beim Programmieren. Doch nun komme ich nicht weiter.
Die App soll nach dem öffnen einer pdf Datei starten. Hier wollte ich dann zwei Buttons haben mit denen ich die pdf per intent an eine andere App weiterleiten kann. Die Buttons funktionieren bereits, aber wie schaffe ich es, dass meine App standardmäßig für PDF-Dateien geöffnet wird? Habe schon viel mit intent Filtern ausprobiert, doch bisher ohne Erfolg.



Code:
package com.example.pdf_auswahl;

import java.io.File;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

public class MainActivity extends ActionBarActivity {


	Button button1;
	Button button2;
	
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btnClick1();
		btnClick2();
		
	}
	
	 public void btnClick1() {
	        button1 = (Button) findViewById(R.id.button1);
	        button1.setOnClickListener(new OnClickListener() {
	                @Override
	                public void onClick(View arg0) {

	                	File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/example.pdf");
	            		Intent intent = new Intent(Intent.ACTION_VIEW);
	            		intent.setDataAndType(Uri.fromFile(file), "application/pdf");
	            		intent.setPackage("com.adobe.reader");
	            		startActivity(intent);

	                }
	        });
	}
	
	 public void btnClick2() {
	        button2 = (Button) findViewById(R.id.button2);
	        button2.setOnClickListener(new OnClickListener() {
	                @Override
	                public void onClick(View arg0) {

	                	File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/example.pdf");
	            		Intent intent = new Intent(Intent.ACTION_VIEW);
	            		intent.setDataAndType(Uri.fromFile(file), "application/pdf");
	            		intent.setPackage("epson.print");
	            		startActivity(intent);

	                }
	        });
	}
	

}


Schöne Grüße
Ste-we
 
IntentFilter sind schon der richtige Ansatz. Es gibt einfach verschiedene Szenarien, die dazu führen können, dass ein Filter entweder zutrifft oder nicht. Zum Beispiel kann es sein, dass der Filter funktioniert, wenn du PDFs mit einem File-Browser öffnest, aber nicht, wenn du das PDF über eine Webseite lädst. Gut möglich, dass du also mehrere Filter brauchst, um alle Fälle abzudecken.

Was auch noch ein Problem sein könnte: Es ist bereits eine App als Standard definiert. Dann werden deine Filter ignoriert, bis du die Standardeinstellungen wieder löschst (Kann dir leider grad nicht auswendig sagen, wie man das macht).

Als Beispiel könntest du mal DIESE Antwort von Stackoverflow testen.

Wenn deine App über einen Intent gestartet wird, hast du danach in deiner Activity Zugriff auf diesen Intent. Dafür steht dir die Methode getIntent() zur Verfügung, worüber du an die Details (z.B. File-URI) des Intent kommst.
 
Zoopa schrieb:
Was auch noch ein Problem sein könnte: Es ist bereits eine App als Standard definiert. Dann werden deine Filter ignoriert, bis du die Standardeinstellungen wieder löschst (Kann dir leider grad nicht auswendig sagen, wie man das macht).

Eigentlich sollte Android, wenn man eine neue App für das entsprechende Intent installiert wieder die Auswahl anzeigen.
Ich meine zumindest das war mal so, aber ganz sicher bin ich mir nicht ^^
 
Hallo Zoopa,
zunächst mal danke für die Infos.
Den Link hatte ich gestern auch schon mal gefunden gehabt. Leider hatte ich damit jetzt auch keinen Erfolg.
Die Frage mit welcher Anwendung eine pdf geöffnet werden soll kommt bereits immer, jedoch fehlt meine Anwendung in der Auswahl.

So hatte ich das jetzt ausprobiert:

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.pdf_auswahl"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            #####################################Ab hier habe ich die Filter eingefügt################################
           	<intent-filter>
    			<action android:name="android.intent.action.VIEW" />
    			<category android:name="android.intent.category.BROWSABLE" />
    			<category android:name="android.intent.category.DEFAULT" />
    			<data android:scheme="http" />
    			<data android:host="*" />
    			<data android:pathPattern=".*\\.pdf" />
  			</intent-filter>
  			
           	<intent-filter>
    			<action android:name="android.intent.action.VIEW" />
    			<category android:name="android.intent.category.BROWSABLE" />
    			<category android:name="android.intent.category.DEFAULT" />
    			<data android:scheme="http" />
    			<data android:host="*" />
    			<data android:mimeType="application/pdf" />
  			</intent-filter>
            
           	<intent-filter>
    			<action android:name="android.intent.action.VIEW" />
    			<category android:name="android.intent.category.DEFAULT" />
    			<data android:scheme="file" />
    			<data android:host="*" />
    			<data android:pathPattern=".*\\.pdf" />
  			</intent-filter>
  			
        </activity>
    </application>

</manifest>


Der ursprüngliche Beitrag von 19:10 Uhr wurde um 20:27 Uhr ergänzt:

So hat es nun endlich funktioniert:

Code:
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="file" />
                <data android:mimeType="*/*" />
                <data android:pathPattern=".*\\.pdf" />
                <data android:host="*" />
         	</intent-filter>

            <intent-filter>
    			<action android:name="android.intent.action.VIEW"/>
    			<category android:name="android.intent.category.BROWSABLE"/>
    			<category android:name="android.intent.category.DEFAULT"/>
    			<data android:scheme="content" android:pathPattern=".*\\.pdf" android:mimeType="*/*"/>
    		</intent-filter>

Kann mir evtl. noch jemand verraten wie ich mit getintent() den Inhalt auslesen/weitergeben kann?
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
FabianDev
Antworten
5
Aufrufe
560
swa00
swa00
F
  • Fischi84
Antworten
2
Aufrufe
1.916
Fischi84
F
Zurück
Oben Unten