Android Activity


一.AndroidManifestでActivityの動作を制御
    1.単一タスク・モードの強制実行:
デバイス上で1つのactivityインスタンスのみが実行されていることを確認します.activity要素にMAINとLAUNCHERの2つのintentフィルタを含める必要があります.
    android:launchMode="singleInstance"
    2.すべてのactivityを同じタスクとして使用すると、情報の共有が便利になります.
    android:launchMode="singleTask"
    3.ユーザーがactivityにどのようにアクセスしてもタスクのステータスを保存できます:(ユーザーが常に閉じる前のステータスに戻ることを保証します)
    android:alwaysRetainTaskState="true"
    4.Activity縦モードの強制設定:
    android:screenOrientation="portrait"
    5.Activity強制横モード設定:
    android:screenOrientation="landscape"
    6.ハードキーボードのスライドアウトを防止するには、次の手順に従います.
android:configChanges="orientation|keyboardHidden"はscreenOrientationと併用できます
二.この参照はonClickメソッドでは正しく解析されず、匿名の内部クラスで現在のコンテキスト環境を提供する方法を参照します.
Contextを使用thisの代わりに
thisの代わりにgetApplicationContext()を使用する
表示される使用クラス名
メソッドの宣言
三.音声をテキストに変換し、activity表示結果を起動します.
onClickメソッド:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say a word or phrase
and it will show as text"); startActivityForResult(intent, RECOGNIZER_EXAMPLE); onActivityResult(): if(requestCode == RECOGNIZER_EXAMPLE && resultCode == RESULT_OK){     ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); }

四.Activityジャンプ取得エコー値(ActivityとDialogを列挙)
Activityが別のActivityを呼び出す場合、通常は次の方法で戻り値を取得します.
Intent sampleIntent = new Intent(ThisActivity.this, NewActivity.class);
startActivityForResult(sampleIntent , 1);

ただし、Dialogクラス、または他の非Activityクラスが呼び出された場合、startActivity ForResult()メソッドは使用できません.
この場合、別の方法で戻り値を取得する必要があります.方法は次のとおりです.
仮定:メインActivityはMainActivity;呼び出されたDialogクラスはSampleDialogです
    1.インタフェースクラスを定義する必要があります.
interface MyListener{
    public void refreshActivity(String text);
}

    2.SampleDIalogのコンストラクション関数にMyListenerを入力します.
public MyListener (MyListener myListener){
    this.mMyListener = myListener;
}

    3.戻る場所でrefreshActivity()メソッドを呼び出します.
 mMyListener.refreshActivity();

    4.MainActivityでMyListenerインタフェースを実装し、show Dialogで実装されたmyListenerに転送します.
private MyListener myListener = new MyListener(){
    @Override
    public void refreshActivity(String text){
        this.mTextView1.setText(text);
    }
};
new SampleDialog(myListener).show;

これによりDialogから必要なデータを返すことができます.
五.Activityジャンプ時値転送
個人的な経験から3つの方法をまとめます:(AからBへパラメータを渡す)
    1.intentメッセージの転送
Aにデータを追加する:
Intent intent = new Intent(A.this, B.class);
intent.putExtra("activityMain","    A");  // A        
startActivity();
//startActivityForResult(intent1,REQUEST_CODE);

B受信データ
Bundle extras = getIntent().getExtras(); 
if(extras!=null) 
    String MUSIC_PATH =extras.getString("activityMain");

ベースクラスのActivityにカプセル化する方法:
<> (String key) {
    Intent intent = .getIntent()Object obj = intent.getExtras().get(key)(obj == ) {
        }
    () obj}

(String key) {
    .getIntent().hasExtra(key)}

    2.ブロードキャスト方式を用いると,serverがメッセージを伝達する方式もintentに関係する.
利点:アプリケーションが本当に終了するまでバックグラウンドで実行できます.
送信先:
ActivityReceiver activityreceiver = new ActivityReceiver();//          I
IntentFilter filter = new IntentFilter();//  IntentFilter     
filter.addAction("jjplayer.update");//      
registerReceiver(activityreceiver, filter);//     
Intent intent = new Intent(this,MyService.class);
startService(intent);

ここでActivity Receiverは自分で作成した受信ブロードキャストクラスであり、参照コードは以下の通りである.
public class ActivityReceiver extends BroadcastReceiver {
    //          
    @Override public void onReceive(Context context, Intent intent) { 
        method stub int update =intent.getIntExtra("update",-1);//  Intent     
        switch(update){ 
            case 1://      ,       
                status =1; 
                break; 
            case 2://    ,           
                //start.setImageResource(R.drawable.temp);
                btStart.setImageResource(R.drawable.pause); 
                status = 2; 
                break; 
            case 3://    ,        
                btStart.setImageResource(R.drawable.play); 
                status = 3; 
                break; 
        } 
    }
}

送信側が登録すると、リスニングキーなどの異なる応答メカニズムに基づいてメッセージを送信することができ、参照コードは以下の通りである.
public void onClick(View v) {
    //        onclickListenner    
    Intent intent = new Intent("yxj.play.control");//  intent,      
    // yxj.play  control  
    switch(v.getId()){ 
        case R.id.btStart://       
            intent.putExtra("ACTION", 1); //    
            sendBroadcast(intent); //     
            break; 
        case R.id.btStop:
            intent.putExtra("ACTION", 2); 
            sendBroadcast(intent); 
            break; 
    }
}

受信側:
受信側登録情報
ServiceReceiver serviceRt = new ServiceReceiver();//     BroadcastReceiver IntentFilter
intentfilter = new IntentFilter();//     
intentfilter.addAction("yxj.play.control");
registerReceiver(serviceRt, intentfilter);//    ServiceReceiver    server      ,      
public class ServiceReceiver extends BroadcastReceiver{
    Uri uri = Uri.parse("file:///sdcard/breathhard.mp3");
    @Override
    public void onReceive(Context context, Intent intent) {
        int action = intent.getIntExtra("ACTION",-1);//  action
        switch(action){//  action    
            case 1:
            if(status==1){
                mp = MediaPlayer.create(context, uri);
            status = 2;
                Intent sendIntent = new Intent("yxj.play.update");
                sendIntent.putExtra("update", 2);//          
                sendBroadcast(sendIntent);//        
                mp.start();
            
}

サーバ登録:
この方式のserverはAndroidmanifestにある必要がある.xmlファイルの下に登録し、の前に追加
<service android:name = ".MyService" android:process = ":remote"> </service>

    3.SharedPreferrencesストレージクラスの使用
クラスAで設定:
SharedPreferences param = getSharedPreferences("JJParam", MODE_PRIVATE);
SharedPreferences.Editor editor = param.edit();
editor.putString("MUSIC_PATH", currentDirectory.toString());
editor.commit();

クラスBで受信
SharedPreferences param = getSharedPreferences("JJParam", MODE_PRIVATE); 
if(param != null) {//        ,    
if(param.getString("MUSIC_PATH",null)!=null)//       
Music_Path = param.getString("MUSIC_PATH",null);

この使い方は比較的簡単で、生成されたJJParam.xmlファイルシステムは自動的に/data/data/PACKAGE_に格納されます.NAME/shared_prefsディレクトリの下
        /data/data/PACKAGE_NAME/shared_prefsディレクトリの下.
Uriは3つの部分に分かれています:リソースにアクセスする命名メカニズム;リソースを格納するホスト名;リソース自体の名前は、パスで表されます.
例えば「H」ttp://www.baidu.com/text/xxx.html”
ここでHttpはネーミングメカニズム(プロトコル名)で、
www.baidu.comはリソースの場所、text/xxxlhtmlはリソース名です.
Androidシステムでは「content://contacts/1」は、
システム内のcontacts(連絡先)の第1号では、リソースを容易に特定できます.
これらの共通のフォーマットを採用すると、システム内の他のプロセッサとシームレスに対話することができます.例えば、
Intent intent = new Intent(Intent.ACTION_DIAL,  Uri.parse(“tel:555-2368”));  
startActivity(intent);

ダイヤルアッププログラムを起動するために使用できます.
パラメータフォーマットを定義したら、有効化インタフェースで使用できます.
Uri data = Uri.parse("xxxx");  
intent.setData(data);//    

サブインタフェースでは
Intent intent = getIntent();  
Uri data = intent.getData();

送信されたパラメータを受信します
サブインタフェースでは、インタフェースを閉じるときに、確定とキャンセルの区別もあります.
「OK」ボタンをクリックすると、次のように処理できます.
Uri data = Uri.parse("Content://" + edit.getText());  
Intent result = new Intent(null, data);  
setResult(RESULT_OK, result);//     ,     
finish();

キャンセルボタンをクリックすると、次のように処理されます.
setResult(RESULT_CANCELED, null); //     ,     
finish();

親インタフェースでは、
public void onActivityResult(int requestCode, int resultCode, Intent data)
関数を継承して、すべてのサブインタフェースの戻りメッセージを処理します.要求コード、戻りコード、戻り値が表示されます.たとえば、次のようになります.
public void onActivityResult(int requestCode, 
int resultCode, Intent data) {  
super.onActivityResult(requestCode, resultCode, data);  
if (resultCode == Activity.RESULT_OK) {  
Uri horse = data.getData();  
TextView txt = (TextView)findViewById(R.id.TextView01);  
txt.setText(horse.toString());  
}  
}

六.浸漬ステータスバーの効果
まず、この浸漬ステータスバーの効果4.4システム以上がサポートされていることに注意してください.
方法は簡単です.setContentViewの前にバージョン判断を追加します.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
    //       
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
    //                   ,           ,            ,       
    //getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
}

対応するxmlでステータスバーとどのViewの背景色を融合させたいのか、どのViewに次の2行の属性を入れればいいのか
例えばステータスバーとImageViewの色を融合させたい
android:fitsSystemWindows="true"  
android:clipToPadding="true"
<ImageView  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:scaleType="centerCrop"  
    android:fitsSystemWindows="true"  
    android:clipToPadding="true"  
    android:src="@drawable/bg_lesson_normal" />

七.Activityをダイアログスタイルに設定する
Androidでactivityをダイアログスタイルに設定